Home » Archived » M2M (model-to-model transformation) » [QVTO] runtimeexception : VarParameterImpl cannot be cast to MappingParameter
[QVTO] runtimeexception : VarParameterImpl cannot be cast to MappingParameter [message #495084] |
Tue, 03 November 2009 17:37 |
Eclipse User |
|
|
|
Originally posted by: vanbeerst.gmail.com
Hi,
I get following runtime exception when running my QVTO transformation :
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtRuntimeExcepti on:
org.eclipse.m2m.internal.qvt.oml.expressions.impl.VarParamet erImpl
cannot be cast to
org.eclipse.m2m.internal.qvt.oml.expressions.MappingParamete r
at
AuthenticationEnforcerPattern::Model::initialiseRoles(authen ticationenforcer.qvto:204)
at AuthenticationEnforcerPattern::main(authenticationenforcer.q vto:91)
What does this message mean?
This is the code where I invoke the helper :
var roles := modelRoot.initialiseRoles(choice);
This is the signature of the helper itself :
helper Model::initialiseRoles(choice : String) :
pack : Package,
userCred : Class,
enforcer : Class,
subject : Class,
store : Class,
provider : Class,
loginContext : Class,
callBackH : Class
{
// body of helper
}
Regards,
Tony.
|
|
|
Re: [QVTO] runtimeexception : VarParameterImpl cannot be cast to MappingParameter [message #495101 is a reply to message #495084] |
Tue, 03 November 2009 18:28 |
Eclipse User |
|
|
|
Originally posted by: dvorak.radek.gmail.com
Hi Tony,
No idea ;). Could you please check the Eclipse error log for a Java
stack-trace ?
Regards,
/Radek
On Tue, 03 Nov 2009 18:37:41 +0100, Tony Van Beers <vanbeerst@gmail.com>
wrote:
> Hi,
>
> I get following runtime exception when running my QVTO transformation :
> org.eclipse.m2m.internal.qvt.oml.evaluator.QvtRuntimeExcepti on:
> org.eclipse.m2m.internal.qvt.oml.expressions.impl.VarParamet erImpl
> cannot be cast to
> org.eclipse.m2m.internal.qvt.oml.expressions.MappingParamete r
> at
> AuthenticationEnforcerPattern::Model::initialiseRoles(authen ticationenforcer.qvto:204)
> at AuthenticationEnforcerPattern::main(authenticationenforcer.q vto:91)
>
> What does this message mean?
>
> This is the code where I invoke the helper :
> var roles := modelRoot.initialiseRoles(choice);
>
> This is the signature of the helper itself :
> helper Model::initialiseRoles(choice : String) :
> pack : Package,
> userCred : Class,
> enforcer : Class,
> subject : Class,
> store : Class,
> provider : Class,
> loginContext : Class,
> callBackH : Class
> {
> // body of helper
> }
>
> Regards,
> Tony.
|
|
|
Re: [QVTO] runtimeexception : VarParameterImpl cannot be cast to MappingParameter [message #495118 is a reply to message #495101] |
Tue, 03 November 2009 20:08 |
Eclipse User |
|
|
|
Originally posted by: vanbeerst.gmail.com
This is a multi-part message in MIME format.
--------------080805080804080506080406
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit
Hi Radek,
I'll post the stack trace and I'll also add four files in attachment :
- authenticationenforcer.uml : the uml input model
- AuthenticationEnforcerPattern.uml : the uml input pattern
- patterns.profile.uml : the profile used in the input model and the
input pattern
- authenticationenforcer.qvto : the transformation
With these files it should be possible to regenerate the fault.
Here's the stack trace :
java.lang.ClassCastException:
org.eclipse.m2m.internal.qvt.oml.expressions.impl.VarParamet erImpl
cannot be cast to
org.eclipse.m2m.internal.qvt.oml.expressions.MappingParamete r
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.createTupleResult(QvtOperationalEvaluatio nVisitorImpl.java:1930)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.visitOperationBody(QvtOperationalEvaluati onVisitorImpl.java:990)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.visitHelper(QvtOperationalEvaluationVisit orImpl.java:464)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtGenericEvaluat ionVisitor.visitHelper(QvtGenericEvaluationVisitor.java:339)
at
org.eclipse.m2m.internal.qvt.oml.expressions.impl.HelperImpl .accept(HelperImpl.java:112)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.executeImperativeOperation(QvtOperational EvaluationVisitorImpl.java:1611)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.doVisitOperationCallExp(QvtOperationalEva luationVisitorImpl.java:638)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.visitOperationCallExp(QvtOperationalEvalu ationVisitorImpl.java:597)
at
org.eclipse.ocl.EvaluationVisitorDecorator.visitOperationCal lExp(EvaluationVisitorDecorator.java:269)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtGenericEvaluat ionVisitor.visitOperationCallExp(QvtGenericEvaluationVisitor .java:252)
at
org.eclipse.ocl.ecore.impl.OperationCallExpImpl.accept(Opera tionCallExpImpl.java:399)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.visitVariableInitExp(QvtOperationalEvalua tionVisitorImpl.java:1004)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtGenericEvaluat ionVisitor.visitVariableInitExp(QvtGenericEvaluationVisitor. java:407)
at
org.eclipse.m2m.qvt.oml.ecore.ImperativeOCL.impl.VariableIni tExpImpl.accept(VariableInitExpImpl.java:262)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.visitOperationBody(QvtOperationalEvaluati onVisitorImpl.java:985)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.visitEntryOperation(QvtOperationalEvaluat ionVisitorImpl.java:459)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtGenericEvaluat ionVisitor.visitEntryOperation(QvtGenericEvaluationVisitor.j ava:443)
at
org.eclipse.m2m.internal.qvt.oml.expressions.impl.EntryOpera tionImpl.accept(EntryOperationImpl.java:67)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.executeImperativeOperation(QvtOperational EvaluationVisitorImpl.java:1611)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.runMainEntry(QvtOperationalEvaluationVisi torImpl.java:2123)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl$1.invoke(QvtOperationalEvaluationVisitorI mpl.java:924)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.doVisitTransformation(QvtOperationalEvalu ationVisitorImpl.java:898)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEva luationVisitorImpl.visitModule(QvtOperationalEvaluationVisit orImpl.java:750)
at
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtGenericEvaluat ionVisitor.visitModule(QvtGenericEvaluationVisitor.java:371)
at
org.eclipse.m2m.internal.qvt.oml.expressions.impl.ModuleImpl .accept(ModuleImpl.java:622)
at
org.eclipse.m2m.internal.qvt.oml.runtime.project.QvtInterpre tedTransformation.evaluate(QvtInterpretedTransformation.java :170)
at
org.eclipse.m2m.internal.qvt.oml.runtime.project.QvtInterpre tedTransformation.run(QvtInterpretedTransformation.java:118)
at
org.eclipse.m2m.internal.qvt.oml.runtime.launch.QvtLaunchCon figurationDelegateBase.doLaunch(QvtLaunchConfigurationDelega teBase.java:182)
at
org.eclipse.m2m.internal.qvt.oml.runtime.launch.QvtLaunchCon figurationDelegateBase.doLaunch(QvtLaunchConfigurationDelega teBase.java:137)
at
org.eclipse.m2m.internal.qvt.oml.runtime.launch.QvtLaunchCon figurationDelegate$1.run(QvtLaunchConfigurationDelegate.java :65)
at
org.eclipse.m2m.internal.qvt.oml.common.launch.SafeRunner$Sa meThreadRunner.run(SafeRunner.java:33)
at
org.eclipse.m2m.internal.qvt.oml.common.launch.SafeRunner$1. run(SafeRunner.java:26)
at
org.eclipse.m2m.internal.qvt.oml.common.launch.ShallowProces s.run(ShallowProcess.java:41)
at
org.eclipse.m2m.internal.qvt.oml.common.launch.ShallowProces s.run(ShallowProcess.java:32)
at
org.eclipse.m2m.internal.qvt.oml.runtime.launch.QvtLaunchCon figurationDelegate$3.run(QvtLaunchConfigurationDelegate.java :98)
at java.lang.Thread.run(Unknown Source)
Regards,
Tony.
--------------080805080804080506080406
Content-Type: text/xml;
name="authenticationenforcer.uml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="authenticationenforcer.uml"
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:patterns="http:///schemas/patterns/_ad19gMhsEd6r5K_NU5A7XA/1" xmlns:uml="http://www.eclipse.org/uml2/3.0.0/UML" xsi:schemaLocation="http:///schemas/patterns/_ad19gMhsEd6r5K_NU5A7XA/1 ../profiles/patterns.profile.uml#_ad3ysMhsEd6r5K_NU5A7XA">
<uml:Model xmi:id="_czsigMP2Ed6jZdukRk9e2w" name="app">
<packagedElement xmi:type="uml:Class" xmi:id="_k6kjAMP2Ed6jZdukRk9e2w" name="client"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_QMidEd6r5K_NU5A7XA" name="AuthenticationEnforcerPattern" clientDependency="_fya_QsidEd6r5K_NU5A7XA _fya_RMidEd6r5K_NU5A7XA _fya_RsidEd6r5K_NU5A7XA _fya_SMidEd6r5K_NU5A7XA _fya_SsidEd6r5K_NU5A7XA _fya_TMidEd6r5K_NU5A7XA _fya_TsidEd6r5K_NU5A7XA _fya_UMidEd6r5K_NU5A7XA _fya_UsidEd6r5K_NU5A7XA _fya_VMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_QcidEd6r5K_NU5A7XA" name="LoginContext"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_QsidEd6r5K_NU5A7XA" supplier="_fya_QcidEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_Q8idEd6r5K_NU5A7XA" name="Subject"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_RMidEd6r5K_NU5A7XA" supplier="_fya_Q8idEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_RcidEd6r5K_NU5A7XA" name="CallBackHandler"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_RsidEd6r5K_NU5A7XA" supplier="_fya_RcidEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_R8idEd6r5K_NU5A7XA" name="AuthenticationProvider"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_SMidEd6r5K_NU5A7XA" supplier="_fya_R8idEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_ScidEd6r5K_NU5A7XA" name="UserCredentialsStore"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_SsidEd6r5K_NU5A7XA" supplier="_fya_ScidEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_S8idEd6r5K_NU5A7XA" name="AuthenticationEnforcer"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_TMidEd6r5K_NU5A7XA" supplier="_fya_S8idEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_TcidEd6r5K_NU5A7XA" name="Client" clientDependency="_8UmmUMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_TsidEd6r5K_NU5A7XA" supplier="_fya_TcidEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_T8idEd6r5K_NU5A7XA" name="UserCredentials"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_UMidEd6r5K_NU5A7XA" supplier="_fya_T8idEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_UcidEd6r5K_NU5A7XA" name="Package"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_UsidEd6r5K_NU5A7XA" supplier="_fya_UcidEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_U8idEd6r5K_NU5A7XA" name="Strategy" clientDependency="_fybmVMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fya_VMidEd6r5K_NU5A7XA" supplier="_fya_U8idEd6r5K_NU5A7XA" client="_fya_QMidEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fya_VcidEd6r5K_NU5A7XA" name="JAAS Login Module"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fybmUcidEd6r5K_NU5A7XA" name=" Authentication Provider - Based"/>
<packagedElement xmi:type="uml:Class" xmi:id="_fybmU8idEd6r5K_NU5A7XA" name="Container Authenticated"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_fybmVMidEd6r5K_NU5A7XA" supplier="_fybmU8idEd6r5K_NU5A7XA" client="_fya_U8idEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_8UmmUMidEd6r5K_NU5A7XA" supplier="_k6kjAMP2Ed6jZdukRk9e2w" client="_fya_TcidEd6r5K_NU5A7XA"/>
<profileApplication xmi:id="_fv86EMidEd6r5K_NU5A7XA">
<eAnnotations xmi:id="_fv86EcidEd6r5K_NU5A7XA" source="http://www.eclipse.org/uml2/2.0.0/UML">
<references xmi:type="ecore:EPackage" href="../profiles/patterns.profile.uml#_ad3ysMhsEd6r5K_NU5A7XA "/>
</eAnnotations>
<appliedProfile href="../profiles/patterns.profile.uml#nWUNbiSD.AAAAQLn_profile "/>
</profileApplication>
</uml:Model>
<patterns:Pattern xmi:id="_fybmVcidEd6r5K_NU5A7XA" base_Class="_fya_QMidEd6r5K_NU5A7XA"/>
<patterns:Role xmi:id="_fybmVsidEd6r5K_NU5A7XA" base_Class="_fya_QcidEd6r5K_NU5A7XA"/>
<patterns:Role xmi:id="_fybmV8idEd6r5K_NU5A7XA" base_Class="_fya_Q8idEd6r5K_NU5A7XA"/>
<patterns:Role xmi:id="_fybmWMidEd6r5K_NU5A7XA" base_Class="_fya_RcidEd6r5K_NU5A7XA"/>
<patterns:Role xmi:id="_fybmWcidEd6r5K_NU5A7XA" base_Class="_fya_R8idEd6r5K_NU5A7XA"/>
<patterns:Role xmi:id="_fybmWsidEd6r5K_NU5A7XA" base_Class="_fya_ScidEd6r5K_NU5A7XA"/>
<patterns:Role xmi:id="_fybmW8idEd6r5K_NU5A7XA" base_Class="_fya_S8idEd6r5K_NU5A7XA"/>
<patterns:Role xmi:id="_fybmXMidEd6r5K_NU5A7XA" base_Class="_fya_TcidEd6r5K_NU5A7XA"/>
<patterns:Role xmi:id="_fybmXcidEd6r5K_NU5A7XA" base_Class="_fya_T8idEd6r5K_NU5A7XA"/>
<patterns:Role xmi:id="_fybmXsidEd6r5K_NU5A7XA" base_Class="_fya_UcidEd6r5K_NU5A7XA"/>
<patterns:Choice xmi:id="_fybmX8idEd6r5K_NU5A7XA" base_Class="_fya_U8idEd6r5K_NU5A7XA"/>
</xmi:XMI>
--------------080805080804080506080406
Content-Type: text/xml;
name="AuthenticationEnforcerPattern.uml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="AuthenticationEnforcerPattern.uml"
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:patterns="http:///schemas/patterns/_iiENkMIUEd6mBbItoPKgjA/0" xmlns:patterns_1="http:///schemas/patterns/_ad19gMhsEd6r5K_NU5A7XA/1" xmlns:uml="http://www.eclipse.org/uml2/3.0.0/UML" xsi:schemaLocation="http:///schemas/patterns/_iiENkMIUEd6mBbItoPKgjA/0 ../profiles/patterns.profile.uml#_iiE0oMIUEd6mBbItoPKgjA http:///schemas/patterns/_ad19gMhsEd6r5K_NU5A7XA/1 ../profiles/patterns.profile.uml#_ad3ysMhsEd6r5K_NU5A7XA">
<uml:Model xmi:id="_mf0coMPBEd6jZdukRk9e2w" name="authenticationenforcerpattern">
<packagedElement xmi:type="uml:Class" xmi:id="_wrrMoMPBEd6jZdukRk9e2w" name="AuthenticationEnforcerPattern" clientDependency="_cOJjEMPCEd6jZdukRk9e2w _jwTs8MPCEd6jZdukRk9e2w _wRofgMPCEd6jZdukRk9e2w _0S3gUMPCEd6jZdukRk9e2w _-5jLIMPCEd6jZdukRk9e2w _WsHZsMPJEd6jZdukRk9e2w _pDDvQMPeEd6jZdukRk9e2w _5DYjcMhsEd6r5K_NU5A7XA _6FHGYMiREd6r5K_NU5A7XA _7CoekMiREd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_8LdpsMPBEd6jZdukRk9e2w" name="Client"/>
<packagedElement xmi:type="uml:Class" xmi:id="_-dmEYMPBEd6jZdukRk9e2w" name="UserCredentials"/>
<packagedElement xmi:type="uml:Class" xmi:id="_Qv22oMPJEd6jZdukRk9e2w" name="UserCredentialsStore"/>
<packagedElement xmi:type="uml:Class" xmi:id="_BF-b4MPCEd6jZdukRk9e2w" name="AuthenticationProvider"/>
<packagedElement xmi:type="uml:Class" xmi:id="_FCulUMPCEd6jZdukRk9e2w" name="AuthenticationEnforcer"/>
<packagedElement xmi:type="uml:Class" xmi:id="_Kvi-MMPCEd6jZdukRk9e2w" name="Subject"/>
<packagedElement xmi:type="uml:Class" xmi:id="_jXVikMPeEd6jZdukRk9e2w" name="Package"/>
<packagedElement xmi:type="uml:Class" xmi:id="_kdSpYMiREd6r5K_NU5A7XA" name="LoginContext"/>
<packagedElement xmi:type="uml:Class" xmi:id="_nwRdEMiREd6r5K_NU5A7XA" name="CallBackHandler"/>
<packagedElement xmi:type="uml:Class" xmi:id="_06eNUMhsEd6r5K_NU5A7XA" name="Strategy" clientDependency="_RitZEMhtEd6r5K_NU5A7XA _eSPmwMhtEd6r5K_NU5A7XA _zlN1IMhtEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_KqsYYMhtEd6r5K_NU5A7XA" name="Container Authenticated"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_RitZEMhtEd6r5K_NU5A7XA" supplier="_KqsYYMhtEd6r5K_NU5A7XA" client="_06eNUMhsEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_XTzN8MhtEd6r5K_NU5A7XA" name=" Authentication Provider - Based"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_eSPmwMhtEd6r5K_NU5A7XA" supplier="_XTzN8MhtEd6r5K_NU5A7XA" client="_06eNUMhsEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Class" xmi:id="_j-G9YMhtEd6r5K_NU5A7XA" name="JAAS Login Module"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_zlN1IMhtEd6r5K_NU5A7XA" supplier="_j-G9YMhtEd6r5K_NU5A7XA" client="_06eNUMhsEd6r5K_NU5A7XA"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_cOJjEMPCEd6jZdukRk9e2w" supplier="_8LdpsMPBEd6jZdukRk9e2w" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_jwTs8MPCEd6jZdukRk9e2w" supplier="_-dmEYMPBEd6jZdukRk9e2w" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_WsHZsMPJEd6jZdukRk9e2w" supplier="_Qv22oMPJEd6jZdukRk9e2w" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_wRofgMPCEd6jZdukRk9e2w" supplier="_BF-b4MPCEd6jZdukRk9e2w" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_0S3gUMPCEd6jZdukRk9e2w" supplier="_FCulUMPCEd6jZdukRk9e2w" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_-5jLIMPCEd6jZdukRk9e2w" supplier="_Kvi-MMPCEd6jZdukRk9e2w" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_pDDvQMPeEd6jZdukRk9e2w" supplier="_jXVikMPeEd6jZdukRk9e2w" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_6FHGYMiREd6r5K_NU5A7XA" supplier="_kdSpYMiREd6r5K_NU5A7XA" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_7CoekMiREd6r5K_NU5A7XA" supplier="_nwRdEMiREd6r5K_NU5A7XA" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<packagedElement xmi:type="uml:Dependency" xmi:id="_5DYjcMhsEd6r5K_NU5A7XA" supplier="_06eNUMhsEd6r5K_NU5A7XA" client="_wrrMoMPBEd6jZdukRk9e2w"/>
<profileApplication xmi:id="_vftIwMPBEd6jZdukRk9e2w">
<eAnnotations xmi:id="_vfu98MPBEd6jZdukRk9e2w" source="http://www.eclipse.org/uml2/2.0.0/UML">
<references xmi:type="ecore:EPackage" href="../profiles/patterns.profile.uml#_ad3ysMhsEd6r5K_NU5A7XA "/>
</eAnnotations>
<appliedProfile href="../profiles/patterns.profile.uml#nWUNbiSD.AAAAQLn_profile "/>
</profileApplication>
</uml:Model>
<patterns:Pattern xmi:id="_NtJ-0MPCEd6jZdukRk9e2w" base_Class="_wrrMoMPBEd6jZdukRk9e2w"/>
<patterns:Role xmi:id="_REfuEMPCEd6jZdukRk9e2w" base_Class="_8LdpsMPBEd6jZdukRk9e2w"/>
<patterns:Role xmi:id="_SMbmgMPCEd6jZdukRk9e2w" base_Class="_-dmEYMPBEd6jZdukRk9e2w"/>
<patterns:Role xmi:id="_TOBmYMPCEd6jZdukRk9e2w" base_Class="_BF-b4MPCEd6jZdukRk9e2w"/>
<patterns:Role xmi:id="_Vb5MIMPCEd6jZdukRk9e2w" base_Class="_FCulUMPCEd6jZdukRk9e2w"/>
<patterns:Role xmi:id="_WmRUkMPCEd6jZdukRk9e2w" base_Class="_Kvi-MMPCEd6jZdukRk9e2w"/>
<patterns:Role xmi:id="_VX2VcMPJEd6jZdukRk9e2w" base_Class="_Qv22oMPJEd6jZdukRk9e2w"/>
<patterns:Role xmi:id="_n0itsMPeEd6jZdukRk9e2w" base_Class="_jXVikMPeEd6jZdukRk9e2w"/>
<patterns_1:Pattern xmi:id="_nV_7sMhsEd6r5K_NU5A7XA" base_Class="_wrrMoMPBEd6jZdukRk9e2w"/>
<patterns_1:Role xmi:id="_oZvQoMhsEd6r5K_NU5A7XA" base_Class="_8LdpsMPBEd6jZdukRk9e2w"/>
<patterns_1:Role xmi:id="_prnIMMhsEd6r5K_NU5A7XA" base_Class="_-dmEYMPBEd6jZdukRk9e2w"/>
<patterns_1:Role xmi:id="_q6IJwMhsEd6r5K_NU5A7XA" base_Class="_Qv22oMPJEd6jZdukRk9e2w"/>
<patterns_1:Role xmi:id="_tTVc0MhsEd6r5K_NU5A7XA" base_Class="_BF-b4MPCEd6jZdukRk9e2w"/>
<patterns_1:Role xmi:id="_ucut0MhsEd6r5K_NU5A7XA" base_Class="_FCulUMPCEd6jZdukRk9e2w"/>
<patterns_1:Role xmi:id="_vtw34MhsEd6r5K_NU5A7XA" base_Class="_Kvi-MMPCEd6jZdukRk9e2w"/>
<patterns_1:Role xmi:id="_xe76kMhsEd6r5K_NU5A7XA" base_Class="_jXVikMPeEd6jZdukRk9e2w"/>
<patterns_1:Choice xmi:id="_3Xr2oMhsEd6r5K_NU5A7XA" base_Class="_06eNUMhsEd6r5K_NU5A7XA"/>
<patterns_1:Role xmi:id="_2JzucMiREd6r5K_NU5A7XA" base_Class="_kdSpYMiREd6r5K_NU5A7XA"/>
<patterns_1:Role xmi:id="_3muYYMiREd6r5K_NU5A7XA" base_Class="_nwRdEMiREd6r5K_NU5A7XA"/>
</xmi:XMI>
--------------080805080804080506080406
Content-Type: text/xml;
name="patterns.profile.uml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="patterns.profile.uml"
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/3.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8R c_NA">
<uml:Profile xmi:id="nWUNbiSD.AAAAQLn_profile" name="patterns" metaclassReference="_AS5TkMhsEd6r5K_NU5A7XA">
<eAnnotations xmi:id="_iiENkcIUEd6mBbItoPKgjA" source="http://www.eclipse.org/uml2/2.0.0/UML">
<contents xmi:type="ecore:EPackage" xmi:id="_ad3ysMhsEd6r5K_NU5A7XA" name="patterns" nsURI="http:///schemas/patterns/_ad19gMhsEd6r5K_NU5A7XA/1" nsPrefix="patterns">
<eClassifiers xmi:type="ecore:EClass" xmi:id="_ad3yschsEd6r5K_NU5A7XA" name="Pattern">
<eAnnotations xmi:id="_ad3ysshsEd6r5K_NU5A7XA" source="http://www.eclipse.org/uml2/2.0.0/UML" references="jHhNbiSD.AAAAWKq_Class"/>
<eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_ad3ys8hsEd6r5K_NU5A7XA" name="base_Class" ordered="false" lowerBound="1">
<eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/3.0.0/UML#//Class"/>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xmi:type="ecore:EClass" xmi:id="_ad3ytchsEd6r5K_NU5A7XA" name="Role">
<eAnnotations xmi:id="_ad3ytshsEd6r5K_NU5A7XA" source="http://www.eclipse.org/uml2/2.0.0/UML" references="if9NbiSD.AAAAcOO_Class"/>
<eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_ad3yt8hsEd6r5K_NU5A7XA" name="base_Class" ordered="false" lowerBound="1">
<eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/3.0.0/UML#//Class"/>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xmi:type="ecore:EClass" xmi:id="_ad3yuchsEd6r5K_NU5A7XA" name="Choice">
<eAnnotations xmi:id="_ad3yushsEd6r5K_NU5A7XA" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_B5JfsMhsEd6r5K_NU5A7XA"/>
<eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_ad3yu8hsEd6r5K_NU5A7XA" name="base_Class" ordered="false" lowerBound="1">
<eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/3.0.0/UML#//Class"/>
</eStructuralFeatures>
</eClassifiers>
</contents>
</eAnnotations>
<elementImport xmi:id="_AS5TkMhsEd6r5K_NU5A7XA">
<importedElement xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
</elementImport>
<packagedElement xmi:type="uml:Stereotype" xmi:id="jHhNbiSD.AAAAWKq_Class" name="Pattern">
<ownedAttribute xmi:id="jHhNbiSD.AAAAWKq_Class_to" name="base_Class" association="jHhNbiSD.AAAAWKq_Class_extension">
<type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Extension" xmi:id="jHhNbiSD.AAAAWKq_Class_extension" name="Class_Pattern" memberEnd="jHhNbiSD.AAAAWKq_Class_from jHhNbiSD.AAAAWKq_Class_to">
<ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="jHhNbiSD.AAAAWKq_Class_from" type="jHhNbiSD.AAAAWKq_Class" aggregation="composite" association="jHhNbiSD.AAAAWKq_Class_extension"/>
</packagedElement>
<packagedElement xmi:type="uml:Stereotype" xmi:id="if9NbiSD.AAAAcOO_Class" name="Role">
<ownedAttribute xmi:id="if9NbiSD.AAAAcOO_Class_to" name="base_Class" association="if9NbiSD.AAAAcOO_Class_extension">
<type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Extension" xmi:id="if9NbiSD.AAAAcOO_Class_extension" name="Class_Role" memberEnd="if9NbiSD.AAAAcOO_Class_from if9NbiSD.AAAAcOO_Class_to">
<ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="if9NbiSD.AAAAcOO_Class_from" type="if9NbiSD.AAAAcOO_Class" aggregation="composite" association="if9NbiSD.AAAAcOO_Class_extension"/>
</packagedElement>
<packagedElement xmi:type="uml:Stereotype" xmi:id="_B5JfsMhsEd6r5K_NU5A7XA" name="Choice">
<ownedAttribute xmi:id="_DZlXsMhsEd6r5K_NU5A7XA" name="base_Class" association="_DZkJkMhsEd6r5K_NU5A7XA">
<type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Extension" xmi:id="_DZkJkMhsEd6r5K_NU5A7XA" name="Class_Choice" memberEnd="_DZkwoMhsEd6r5K_NU5A7XA _DZlXsMhsEd6r5K_NU5A7XA">
<ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_DZkwoMhsEd6r5K_NU5A7XA" name="extension_Choice" type="_B5JfsMhsEd6r5K_NU5A7XA" aggregation="composite" association="_DZkJkMhsEd6r5K_NU5A7XA"/>
</packagedElement>
<profileApplication xmi:id="_MNHXEMIPEd6mBbItoPKgjA">
<eAnnotations xmi:id="_MNKaYMIPEd6mBbItoPKgjA" source="http://www.eclipse.org/uml2/2.0.0/UML">
<references xmi:type="ecore:EPackage" href=" pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8R c_NA"/>
</eAnnotations>
<appliedProfile href="pathmap://UML_PROFILES/Ecore.profile.uml#_0"/>
</profileApplication>
</uml:Profile>
<Ecore:EPackage xmi:id="_NzNLIMIPEd6mBbItoPKgjA" base_Package="nWUNbiSD.AAAAQLn_profile"/>
</xmi:XMI>
--------------080805080804080506080406
Content-Type: text/plain;
name="authenticationenforcer.qvto"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="authenticationenforcer.qvto"
aW1wb3J0IFBhdHRlcm5zTGliOwptb2RlbHR5cGUgVU1MICJzdHJpY3QiIHVz ZXMgdW1sKCdo
dHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvMy4wLjAvVU1MJyk7CgovKioK ICogQHRyYW5z
Zm9ybWF0aW9uIEF1dGhlbnRpY2F0aW9uRW5mb3JjZXJQYXR0ZXJuCiAqCiAq IFRoaXMgdHJh
bnNmb3JtYXRpb24gYXBwbGllcyB0aGUgYXV0aGVudGljYXRpb24gZW5mb3Jj ZXIgcGF0dGVy
biB0byB0aGUgZ2l2ZW4gVU1MCiAqIG1vZGVsLiBJdCB3aWxsIGJlIGFwcGxp ZWQgdG8gY2xh
c3MgZGlhZ3JhbXMgYW5kIHNlcXVlbmNlIGRpYWdyYW1zIGluIHRoZSBtb2Rl bC4KICogVGhl
IGF1dGhlbnRpY2F0aW9uIGVuZm9yY2VyIHBhdHRlcm4gaXMgdGFrZW4gZnJv bSB0aGUgYm9v
ayAiQ29yZSBTZWN1cml0eSBQYXR0ZXJucyAtCiAqIEJlc3QgUHJhY3RpY2Vz IGFuZCBTdHJh
dGVnaWVzIGZvciBKMkVFIiBieSBDaHJpc3RvcGhlciBTdGVlbCwgUmFtZXNo IE5hZ2FwcGFu
IGFuZAogKiBSYXkgTGFpLgogKiBUaGUgaW50ZW50IG9mIHRoZSBhdXRoZW50 aWNhdGlvbiBl
bmZvcmNlciBwYXR0ZXJuIGlzIHRvIHByb3ZpZGUgYSBjZW50cmFsaXplZCAK ICogYXV0aGVu
dGljYXRpb24gZW5mb3JjZW1lbnQgdGhhdCBwZXJmb3JtcyBhdXRoZW50aWNh dGlvbiBvZiB1
c2VycyBhbmQgZW5jYXBzdWxhdGVzCiAqIHRoZSBkZXRhaWxzIG9mIHRoZSBh dXRoZW50aWNh
dGlvbiBtZWNoYW5pc20uCiAqCiAqIFRoZSByb2xlcyBhc3NvY2lhdGVkIHdp dGggdGhpcyBw
YXR0ZXJuIGFyZSA6IAogKgkJLSBDbGllbnQgOiB0aGUgY2xpZW50IHdoaWNo IHdpc2hlcyB0
byBhdXRoZW50aWNhdGUgYSB1c2VyCiAqCQktIFVzZXJDcmVkZW50aWFscyA6 IGEgY29udGV4
dCBvYmplY3Qgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSB1c2VyIGNyZWRlbnRp YWxzCiAqCQkt
IFVzZXJDcmVkZW50aWFsc1N0b3JlIDogYSBzdG9yZSB3aGljaCBjb250YWlu cyBhbGwgdXNl
ciBjcmVkZW50aWFscwogKgkJLSBBdXRoZW50aWNhdGlvblByb3ZpZGVyIDog cHJvdmlkZXMg
YXV0aGVudGljYXRpb24gZnVuY3Rpb25hbGl0eQogKgkJLSBBdXRoZW50aWNh dGlvbkVuZm9y
Y2VyIDogdGhlIGF1dGhlbnRpY2F0aW9uIGVuZm9yY2VyIHdoaWNoIHdpbGwg aGFuZGxlCiAq
CQkJCQkJCQkgICBhdXRoZW50aWNhdGlvbiByZXF1ZXN0cyBjb21pbmcgZm9y bSB0aGUgY2xp
ZW50LgogKgkJLSBTdWJqZWN0IDogcmVwcmVzZW50cyBhbiBhdXRoZW50aWNh dGVkIHVzZXIg
KGNyZWF0ZWQgYnkgYXV0aGVudGljYXRpb24gZW5mb3JjZXIpCiAqCQktIFBh Y2thZ2UgOiB0
aGUgcGFja2FnZSBjb250YWluaW5nIHRoZSBjbGFzc2VzIG5lZWRlZCBmb3Ig YXV0aGVudGlj
YXRpb24gZW5mb3JjZW1lbnQKICogVGhlcmUgc2hvdWxkIG9ubHkgYmUgb25l IG9mIFVzZXJD
cmVkZW50aWFsc1N0b3JlIG9yIEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIuIFdo ZW4KICogeW91
IGFzc2lnbiBhbiBVc2VyQ3JlZGVudGlhbHNTdG9yZSByb2xlIHRvIGFuIGVs ZW1lbnQsIHRo
YXQgZWxlbWVudCB3aWxsIGJlIHVzZWQKICogdG8gcmV0cmlldmUgdGhlIHVz ZXIgY3JlZGVu
dGlhbHMuIE90aGVyd2lzZSB3aGVuIHlvdSBhc3NpZ24gYW4gQXV0aGVudGlj YXRpb25Qcm92
aWRlcgogKiByb2xlLCB0aGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgd2ls bCBiZSB1c2Vk
IHRvIGF1dGhlbnRpY2F0ZSB0aGUgY2xpZW50LiBXaGVuIG5vbmUKICogb2Yg dGhvc2Ugcm9s
ZXMgaXMgYXNzaWduZWQsIGFuIEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgZWxl bWVudCB3aWxs
IGJlIGNyZWF0ZWQuCiAqCiAqIFRvIGFzc2lnbiByb2xlcyB0byBlbGVtZW50 cyBpbiB0aGUg
aW5wdXQgbW9kZWwsIHlvdSBzaG91bGQgY29ubmVjdCB0aGUgcm9sZSBlbGVt ZW50cwogKiB3
aXRoIHRoZSBlbGVtZW50IHRvIHdoaWNoIHlvdSB3YW50IHRvIGFzc2lnbiB0 aGUgcm9sZSB3
aXRoIGEgZGVwZW5kZW5jeSAoYWN0dWFsbHkgYW55CiAqIGtpbmQgb2YgY29u bmVjdGlvbiB3
aWxsIHdvcmspLiBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgcm9sZSBlbGVtZW50 cyBpbiB0aGUg
bW9kZWwgeWV0LAogKiB5b3Ugc2hvdWxkIHJ1biB0aGlzIHRyYW5zZm9ybWF0 aW9uIG9uY2Us
IHRoaXMgd2lsbCBjcmVhdGUgdGhlbS4KICoKICogVGhlIHBhdHRlcm4gaXMg b25seSBhcHBs
aWVkIHdoZW4gYXQgbGVhc3Qgb25lIGVsZW1lbnQgaGFzIHRoZSBDbGllbnQg cm9sZSBhc3Np
Z25lZAogKiBpbiB0aGUgbW9kZWwuIEFsbCBuZXcgY2xhc3NlcyBhcmUgY3Jl YXRlZCBpbiB0
aGUgcGFja2FnZSB3aGljaCBoYXMgdGhlIFBhY2thZ2Ugcm9sZQogKiBhc3Np Z25lZC4gSWYg
bm8gcGFja2FnZSBoYXMgdGhpcyByb2xlIGFzc2lnbmVkLCBhIG5ldyBwYWNr YWdlIGlzIGNy
ZWF0ZWQuCiAqKi8KdHJhbnNmb3JtYXRpb24gQXV0aGVudGljYXRpb25FbmZv cmNlclBhdHRl
cm4oaW5vdXQgbW9kZWwgOiBVTUwsIGluIHBhdHRlcm4gOiBVTUwpCmFjY2Vz cyBQYXR0ZXJu
c0xpYihVTUwpOwoKbWFpbigpIHsKCS8vIGdldCB0aGUgcm9vdCBvZiB0aGUg bW9kZWwKCXZh
ciBtb2RlbFJvb3QgOj0gbW9kZWwub2JqZWN0c09mVHlwZShNb2RlbCktPmFu eSh0cnVlKTsK
CS8vIGdldCB0aGUgcm9vdCBvZiB0aGUgcGF0dGVybgoJdmFyIHBhdHRlcm5S b290IDo9IHBh
dHRlcm4ub2JqZWN0c09mVHlwZShNb2RlbCktPmFueSh0cnVlKTsKCQoJLy8g aW5pdGlhbGlz
ZSB0aGUgcGF0dGVybiBpbiB0aGUgbW9kZWwKCWlmKG5vdCBtb2RlbFJvb3Qu aW5pdGlhbGlz
ZVBhdHRlcm4ocGF0dGVyblJvb3QpKQoJdGhlbgoJewoJCS8vIGFuIGVycm9y IG9jY3VyZWQs
IGFib3J0IHRoZSB0cmFuc2Zvcm1hdGlvbgoJCXJldHVybjsKCX0KCWVuZGlm OwoJCgkvLyBn
ZXQgYWxsIGNsaWVudHMKCXZhciBjbGllbnRzIDo9IG1vZGVsUm9vdC5nZXRS b2xlQXNzaWdu
bWVudHMoIkF1dGhlbnRpY2F0aW9uRW5mb3JjZXJQYXR0ZXJuIiwgIkNsaWVu dCIpOwoJLy8g
Z2V0IHRoZSBjbGllbnRzIHdoaWNoIGFyZSBjbGFzc2VzCgl2YXIgY2xpZW50 Q2xhc3NlcyA6
PSBjbGllbnRzLT5zZWxlY3QoZSB8IGUub2NsSXNUeXBlT2YoQ2xhc3MpKS0+ Y29sbGVjdChv
Y2xBc1R5cGUoQ2xhc3MpKTsKCS8vIGNoZWNrIGlmIGNsaWVudHMgaGF2ZSBi ZWVuIGZvdW5k
CglpZihjbGllbnRDbGFzc2VzLT5pc0VtcHR5KCkpCgl0aGVuCgl7CgkJbG9n KCJObyBjbGll
bnRzIGZvdW5kLCBub3RoaW5nIHRvIGRvIik7CgkJcmV0dXJuOwoJfQoJZW5k aWY7CgkKCS8v
IHdlIHNob3VsZCBjaGVjayB0aGF0IGEgY29ycmVjdCBjaG9pY2Ugb2Ygc3Ry YXRlZ3kgaGFz
IGJlZW4gbWFkZQoJdmFyIHJlcyA6PSBtb2RlbFJvb3QuY2hlY2tTdHJhdGVn eUNob2ljZSgp
OwoJaWYobm90IHJlcy5yZXMpCgl0aGVuCgl7CgkJcmV0dXJuOwoJfQoJZW5k aWY7Cgl2YXIg
Y2hvaWNlIDo9IHJlcy5jaG9pY2U7CgkKCS8vIGluaXRpYWxpemUgYWxsIHJv bGVzCgl2YXIg
cm9sZXMgOj0gbW9kZWxSb290LmluaXRpYWxpc2VSb2xlcyhjaG9pY2UpOwoJ Ly8gaW5pdGlh
bGl6ZSBhbGwgY29ubmVjdGlvbnMKCXJvbGVzLmluaXRpYWxpc2VDb25uZWN0 aW9ucyhjaG9p
Y2UsIGNsaWVudENsYXNzZXMpOwoJCgkKCS8vbW9kZWxSb290LT5tYXAgaW5p dGlhbGlzZVBh
Y2thZ2UoKTsKCS8vdmFyIHVzZXJDcmVkIDo9IG1vZGVsUm9vdC0+bWFwIGlu aXRpYWxpc2VV
c2VyQ3JlZGVudGlhbHMoKS0+YW55KHRydWUpOwoJLy92YXIgZW5mb3JjZXIg Oj0gbW9kZWxS
b290LT5tYXAgaW5pdGlhbGlzZUF1dGhlbnRpY2F0aW9uRW5mb3JjZXIoKS0+ YW55KHRydWUp
OwoJLy92YXIgc3ViamVjdCAgOj0gbW9kZWxSb290LT5tYXAgaW5pdGlhbGlz ZVN1YmplY3Qo
KS0+YW55KHRydWUpOwoJLy8gdGhlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVy IHJvbGUgc2hv
dWxkIG9ubHkgYmUgaW5pdGlhbGlzZWQgaWYgdGhlcmUgaXMgbm8gVXNlckNy ZWRlbnRpYWxT
dG9yZQoJLy9pZihzdG9yZS5vY2xJc1VuZGVmaW5lZCgpKQoJLy90aGVuCgkv L3sKCQkvL3By
b3ZpZGVyIDo9IG1vZGVsUm9vdC0+bWFwIGluaXRpYWxpc2VBdXRoZW50aWNh dGlvblByb3Zp
ZGVyKHByb3ZpZGVyKS0+YW55KHRydWUpOwoJLy99CgkvL2VuZGlmOwoJCgkv LyBub3cgYWxs
IGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIGNsYXNzZXMgbmVlZCB0byBiZSBj cmVhdGVkIGlm
IHRoZXkgZG9uJ3QgZXhpc3QgeWV0CgkKfQoKLyoqCiAqIEBxdWVyeSBjaGVj a1N0cmF0ZWd5
Q2hvaWNlCiAqIENoZWNrcyBpZiB0aGUgY2hvaWNlIG9mIHN0cmF0ZWd5IGlz IHZhbGlkLgog
KiBAY29udGV4dCBNb2RlbCB0aGUgcm9vdCBtb2RlbCBpbiB3aGljaCB0byBm aW5kIHRoZSBj
aG9pY2Ugb2Ygc3RyYXRlZ3kKICogQHBhcmFtIFN0cmluZyBoZXJlIHRoZSBj aG9pY2Ugd2ls
bCBiZSBwdXQgaW4gKGlub3V0IHBhcmFtKQogKiBAcmV0dXJuIEJvb2xlYW4g aW5kaWNhdGVz
IHN1Y2Nlc3MKICoqLwpxdWVyeSBNb2RlbDo6Y2hlY2tTdHJhdGVneUNob2lj ZSgpIDogcmVz
IDogQm9vbGVhbiwgY2hvaWNlIDogU3RyaW5nCnsKCS8vIGdldCB0aGUgY2hv aWNlCgljaG9p
Y2UgOj0gc2VsZiAuZ2V0UGF0dGVybigiQXV0aGVudGljYXRpb25FbmZvcmNl clBhdHRlcm4i
KQoJCQkJICAgLmdldENob2ljZSgiU3RyYXRlZ3kiKTsKCS8vIGluaXRpYWxp c2UgcmVzIHRv
IHRydWUKCXJlcyA6PSB0cnVlOwoJCQkJICAgCgkvLyBnZXRDaG9pY2UgcmV0 dXJucyAibnVs
bCIgb3IgInVuZGVmaW5lZCIgaWYgYW4gZXJyb3Igb2NjdXJlZCAKCWlmKChj aG9pY2UgPSAi
bnVsbCIpIG9yIChjaG9pY2UgPSAidW5kZWZpbmVkIikpCgl0aGVuCgl7CgkJ bG9nKCJObyBj
aG9pY2Ugb2Ygc3RyYXRlZ3kgbWFkZSwgcGxlYXNlIG1ha2Ugb25lLiIpOwoJ CXJlcyA6PSBm
YWxzZTsKCX0KCWVsc2UKCXsKCQlpZiggKGNob2ljZSA8PiAiQ29udGFpbmVy IEF1dGhlbnRp
Y2F0ZWQiKSBhbmQKCQkgICAgKGNob2ljZSA8PiAiQXV0aGVudGljYXRpb24g UHJvdmlkZXIg
LSBCYXNlZCIpIGFuZAoJCSAgICAoY2hvaWNlIDw+ICJKQUFTIExvZ2luIE1v ZHVsZSIpICkK
CQl0aGVuCgkJewoJCQlsb2coIkludmFsaWQgY2hvaWNlIG9mIHN0cmF0ZWd5 IG1hZGUsIG9u
bHkgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIDogXG4iICsgCgkJCQkJIlx0LSBD b250YWluZXIg
QXV0aGVudGljYXRlZFxuIiArCgkJCQkJIlx0LSBBdXRoZW50aWNhdGlvbiBQ cm92aWRlciAt
IEJhc2VkXG4iICsgCgkJCQkJIlx0LSBKQUFTIExvZ2luIE1vZHVsZSIpOwoJ CQlyZXMgOj0g
ZmFsc2U7CgkJfQoJCWVuZGlmOwoJfQoJZW5kaWY7Cn0KCmhlbHBlciBUdXBs ZSgKCQkJCXBh
Y2sgICAgICAgICA6IFBhY2thZ2UsIAoJCQkJdXNlckNyZWQgICAgIDogQ2xh c3MsCgkJCQll
bmZvcmNlciAgICAgOiBDbGFzcywKCQkJCXN1YmplY3QgICAgICA6IENsYXNz LAoJCQkJc3Rv
cmUgICAgICAgIDogQ2xhc3MsCgkJCQlwcm92aWRlciAgICAgOiBDbGFzcywK CQkJCWxvZ2lu
Q29udGV4dCA6IENsYXNzLAoJCQkJY2FsbEJhY2tIICAgIDogQ2xhc3MKCQkJ KTo6aW5pdGlh
bGlzZUNvbm5lY3Rpb25zKGNob2ljZSA6IFN0cmluZywgY2xpZW50Q2xhc3Nl cyA6IEJhZyhD
bGFzcykpCnsKCXNlbGYuZW5mb3JjZXIubWFwIGluaXRpYWxpc2VEZXBlbmRl bmN5KHNlbGYu
c3ViamVjdCwgImNyZWF0ZXMiKTsKCXNlbGYuZW5mb3JjZXIubWFwIGluaXRp YWxpc2VEZXBl
bmRlbmN5KHNlbGYudXNlckNyZWQsICJ1c2VzIik7CgkKCWlmKGNob2ljZSA9 ICJDb250YWlu
ZXIgQXV0aGVudGljYXRlZCIpCgl0aGVuCgl7CgkJc2VsZi5lbmZvcmNlci5t YXAgaW5pdGlh
bGlzZURlcGVuZGVuY3koc2VsZi5zdG9yZSwgInVzZXMiKTsKCX0KCWVsc2UK CXsKCQlpZihj
aG9pY2UgPSAiQXV0aGVudGljYXRpb24gUHJvdmlkZXIgLSBCYXNlZCIpCgkJ dGhlbgoJCXsK
CQkJc2VsZi5lbmZvcmNlci5tYXAgaW5pdGlhbGlzZURlcGVuZGVuY3koc2Vs Zi5wcm92aWRl
ciwgInVzZXMiKTsKCQl9CgkJZW5kaWY7Cgl9CgllbmRpZjsKCQoJaWYoY2hv aWNlID0gIkpB
QVMgTG9naW4gTW9kdWxlIikKCXRoZW4KCXsKCQlzZWxmLmVuZm9yY2VyLm1h cCBpbml0aWFs
aXNlRGVwZW5kZW5jeShzZWxmLmxvZ2luQ29udGV4dCwgInVzZXMiKTsKCQlz ZWxmLmVuZm9y
Y2VyLm1hcCBpbml0aWFsaXNlRGVwZW5kZW5jeShzZWxmLmNhbGxCYWNrSCwg ImNyZWF0ZXMi
KTsKCQkKCQlzZWxmLmxvZ2luQ29udGV4dC5tYXAgaW5pdGlhbGlzZURlcGVu ZGVuY3koc2Vs
Zi5wcm92aWRlciwgImNyZWF0ZXMiKTsKCQlzZWxmLmxvZ2luQ29udGV4dC5t YXAgaW5pdGlh
bGlzZUNvbXBvc2l0aW9uKHNlbGYuc3ViamVjdCwgIiIpOwoJCQoJCXNlbGYu cHJvdmlkZXIu
bWFwIGluaXRpYWxpc2VEZXBlbmRlbmN5KHNlbGYuc3ViamVjdCwgInVzZXMi KTsKCQlzZWxm
LnByb3ZpZGVyLm1hcCBpbml0aWFsaXNlRGVwZW5kZW5jeShzZWxmLmNhbGxC YWNrSCwgInVz
ZXMiKTsKCX0KCWVuZGlmOwoJCgljbGllbnRDbGFzc2VzLT5mb3JFYWNoKGNs aWVudCkKCXsK
CQljbGllbnQubWFwIGluaXRpYWxpc2VEZXBlbmRlbmN5KHNlbGYuc3ViamVj dCwgInVzZXMi
KTsKCQljbGllbnQubWFwIGluaXRpYWxpc2VEZXBlbmRlbmN5KHNlbGYuZW5m b3JjZXIsICJ1
c2VzIik7CgkJY2xpZW50Lm1hcCBpbml0aWFsaXNlRGVwZW5kZW5jeShzZWxm LnVzZXJDcmVk
LCAiY3JlYXRlcyIpOwoJfTsKfQoKaGVscGVyIE1vZGVsOjppbml0aWFsaXNl Um9sZXMoY2hv
aWNlIDogU3RyaW5nKSA6CgkJCQkJCQkJCQlwYWNrIDogUGFja2FnZSwgCgkJ CQkJCQkJCQl1
c2VyQ3JlZCA6IENsYXNzLCAKCQkJCQkJCQkJCWVuZm9yY2VyIDogQ2xhc3Ms IAoJCQkJCQkJ
CQkJc3ViamVjdCA6IENsYXNzLCAKCQkJCQkJCQkJCXN0b3JlIDogQ2xhc3Ms IAoJCQkJCQkJ
CQkJcHJvdmlkZXIgOiBDbGFzcywgCgkJCQkJCQkJCQlsb2dpbkNvbnRleHQg OiBDbGFzcywg
CgkJCQkJCQkJCQljYWxsQmFja0ggOiBDbGFzcwp7CQoJLy8gaGVscGVyIHZh cmlhYmxlCgl2
YXIgYXV0aCA6PSAiQXV0aGVudGljYXRpb25FbmZvcmNlclBhdHRlcm4iOwoJ CgkvLyByb2xl
cyBuZWVkZWQgaW4gZXZlcnkgc3RyYXRlZ3kKCXBhY2sgICAgIDo9IHNlbGYu bWFwIGluaXRp
YWxpc2VSb2xlQXNQYWNrYWdlKGF1dGgsICJQYWNrYWdlIiktPmFueSh0cnVl KTsKCXVzZXJD
cmVkIDo9IHBhY2subWFwIGluaXRpYWxpc2VSb2xlQXNDbGFzcyhhdXRoLCAi VXNlckNyZWRl
bnRpYWxzIiktPmFueSh0cnVlKTsKCWVuZm9yY2VyIDo9IHBhY2subWFwIGlu aXRpYWxpc2VS
b2xlQXNDbGFzcyhhdXRoLCAiQXV0aGVudGljYXRpb25FbmZvcmNlciIpLT5h bnkodHJ1ZSk7
CglzdWJqZWN0ICA6PSBwYWNrLm1hcCBpbml0aWFsaXNlUm9sZUFzQ2xhc3Mo YXV0aCwgIlN1
YmplY3QiKS0+YW55KHRydWUpOwoJCgkvLyBpZiB0aGUgc3RyYXRlZ3kgaXMg IkNvbnRhaW5l
ciBBdXRoZW50aWNhdGVkIiwgYSBzdG9yZSByb2xlIGlzIG5lZWRlZCwgb3Ro ZXJ3aXNlIGEg
cHJvdmlkZXIgcm9sZQoJaWYoY2hvaWNlID0gIkNvbnRhaW5lciBBdXRoZW50 aWNhdGVkIikK
CXRoZW4KCXsKCQlzdG9yZSA6PSBwYWNrLm1hcCBpbml0aWFsaXNlUm9sZUFz Q2xhc3MoYXV0
aCwgIlVzZXJDcmVkZW50aWFsc1N0b3JlIiktPmFueSh0cnVlKTsKCX0KCWVs c2UKCXsKCQlw
cm92aWRlciA6PSBwYWNrLm1hcCBpbml0aWFsaXNlUm9sZUFzQ2xhc3MoYXV0 aCwgIkF1dGhl
bnRpY2F0aW9uUHJvdmlkZXIiKS0+YW55KHRydWUpOyAKCX0KCWVuZGlmOwoJ CgkvLyBsb2dp
biBjb250ZXh0IGFuZCBjYWxsYmFja2hhbmRsZXIgYXJlIG9ubHkgbmVlZGVk IGlmIHRoZSBK
QUFTIHN0cmF0ZWd5IGlzIGNob3Nlbi4KCWlmKGNob2ljZSA9ICJKQUFTIExv Z2luIE1vZHVs
ZSIpCgl0aGVuCgl7CgkJbG9naW5Db250ZXh0IDo9IHBhY2subWFwIGluaXRp YWxpc2VSb2xl
QXNDbGFzcyhhdXRoLCAiTG9naW5Db250ZXh0IiktPmFueSh0cnVlKTsKCQlj YWxsQmFja0gg
Oj0gcGFjay5tYXAgaW5pdGlhbGlzZVJvbGVBc0NsYXNzKGF1dGgsICJDYWxs QmFja0hhbmRs
ZXIiKS0+YW55KHRydWUpOwoJfQoJZW5kaWY7Cn0KCi8qKgogKiBJbml0aWFs aXNlcyB0aGUg
cGFja2FnZSByb2xlLCBpZiB0aGF0IHJvbGUgaXMgYXNzaWduZWQgYnkgdGhl IHVzZXIKICog
bm90aGluZyByZWFsbHkgaGFwcGVucywgaWYgbm90IGEgbmV3IHBhY2thZ2Ug aXMgY3JlYXRl
ZCB3aXRoIHRoZSBuYW1lCiAqICdhdXRoZW50aWNhdGlvbicgYW5kIGl0IGlz IGFzc2lnbmVk
IHRoZSBwYWNrYWdlIHJvbGUuIElmIHRoZSBuYW1lCiAqICdhdXRoZW50aWNh dGlvbicnIGlz
IGFscmVhZHkgaW4gdXNlLCBhIG51bWJlciBpcyBhZGRlZCBhdCB0aGUgYmFj ayBvZgogKiB0
aGUgbmFtZSB1bnRpbCBhIHVuaXF1ZSBwYWNrYWdlIG5hbWUgaXMgZm91bmQu CiAqKi8KbWFw
cGluZyBQYWNrYWdlOjppbml0aWFsaXNlUGFja2FnZSgpIDogUGFja2FnZQp7 Cglpbml0Cgl7
CgkJLy8gY2hlY2sgaWYgdGhlIHBhY2thZ2Ugcm9sZSBpcyBhbHJlYWR5IGFz c2lnbmVkCgkJ
dmFyIHAgOj0gc2VsZi5nZXRSb2xlQXNzaWdubWVudHMoIkF1dGhlbnRpY2F0 aW9uRW5mb3Jj
ZXJQYXR0ZXJuIiwgIlBhY2thZ2UiKQoJCQkJCQktPnNlbGVjdChlIHwgZS5v Y2xJc1R5cGVP
ZihQYWNrYWdlKSktPmFueSh0cnVlKS5vY2xBc1R5cGUoUGFja2FnZSk7CgkJ aWYobm90IHAu
b2NsSXNVbmRlZmluZWQoKSkKCQl0aGVuCgkJewoJCQlyZXN1bHQgOj0gcDsK CQl9CgkJZWxz
ZQoJCXsKCQkJLy8gbm8gcGFja2FnZSByb2xlIGlzIGFzc2lnbmVkIGFscmVh ZHksIGNyZWF0
ZSB0aGUgb2JqZWN0CgkJCW9iamVjdCByZXN1bHQgOiBQYWNrYWdlCgkJCXsK CQkJCS8vIG5h
bWUgb2YgdGhlIHBhY2thZ2Ugc2hvdWxkIG5vdCBhbHJlYWR5IGV4aXN0IGlu IHRoZSBwYWNr
YWdlIHJvb3QgZWxlbWVudHMuCgkJCQluYW1lIDo9IHNlbGYudW5pcXVlTmFt ZSgiYXV0aGVu
dGljYXRpb24iKTsKCQkJfTsKCQl9CgkJZW5kaWY7Cgl9CgkKCS8vIGNoZWNr IGlmIHRoZSBw
YWNrYWdlIGlzIGp1c3QgY3JlYXRlZAoJaWYocC5vY2xJc1VuZGVmaW5lZCgp KQoJdGhlbgoJ
ewoJCS8vIFRoZSBwYWNrYWdlIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSBt b2RlbAoJCXNl
bGYuZ2V0TW9kZWwoKS5wYWNrYWdlZEVsZW1lbnQgKz0gcmVzdWx0OwoJCS8v IHRoZSBuZXds
eSBjcmVhdGVkIHBhY2thZ2Ugc2hvdWxkIGdldCB0aGUgUGFja2FnZSByb2xl IGFzc2lnbmVk
CgkJcmVzdWx0LmFzc2lnblJvbGUoIkF1dGhlbnRpY2F0aW9uRW5mb3JjZXJQ YXR0ZXJuIiwg
IlBhY2thZ2UiKTsKCX0KCWVuZGlmOwp9CgovKioKICogSW5pdGlhbGlzZXMg dGhlIFVzZXJD
cmVkZW50aWFscyByb2xlLCBpZiB0aGF0IHJvbGUgaXMgYXNzaWduZWQgYnkg dGhlIHVzZXIK
ICogbm90aGluZyByZWFsbHkgaGFwcGVucywgaWYgbm90IGEgbmV3IENsYXNz IGlzIGNyZWF0
ZWQgd2l0aCB0aGUgbmFtZQogKiAnVXNlckNyZWRlbnRpYWxzJyBhbmQgaXQg aXMgYXNzaWdu
ZWQgdGhlIFVzZXJDcmVkZW50aWFscyByb2xlLiBJZiB0aGUgbmFtZQogKiAn VXNlckNyZWRl
bnRpYWxzJycgaXMgYWxyZWFkeSBpbiB1c2UsIGEgbnVtYmVyIGlzIGFkZGVk IGF0IHRoZSBi
YWNrIG9mCiAqIHRoZSBuYW1lIHVudGlsIGEgdW5pcXVlIG5hbWUgaXMgZm91 bmQuCiAqKi8K
bWFwcGluZyBQYWNrYWdlOjppbml0aWFsaXNlVXNlckNyZWRlbnRpYWxzKCkg OiBDbGFzcwp7
Cglpbml0Cgl7CgkJdmFyIHBhY2sgOj0gc2VsZi5nZXRSb2xlQXNzaWdubWVu dHMoIkF1dGhl
bnRpY2F0aW9uRW5mb3JjZXJQYXR0ZXJuIiwgIlBhY2thZ2UiKS0+YW55KHRy dWUpLm9jbEFz
VHlwZShQYWNrYWdlKTsKCQl2YXIgYyA6PSBzZWxmLmdldFJvbGVBc3NpZ25t ZW50cygiQXV0
aGVudGljYXRpb25FbmZvcmNlclBhdHRlcm4iLCAiVXNlckNyZWRlbnRpYWxz IiktPnNlbGVj
dChlIHwgZS5vY2xJc1R5cGVPZihDbGFzcykpLT5hbnkodHJ1ZSkub2NsQXNU eXBlKENsYXNz
KTsKCQlpZihub3QgYy5vY2xJc1VuZGVmaW5lZCgpKQoJCXRoZW4KCQl7CgkJ CXJlc3VsdCA6
PSBjOwoJCX0KCQllbHNlCgkJewoJCQlvYmplY3QgcmVzdWx0IDogQ2xhc3MK CQkJewoJCQkJ
bmFtZSA6PSBwYWNrLnVuaXF1ZU5hbWUoIlVzZXJDcmVkZW50aWFscyIpOwoJ CQl9CgkJfQoJ
CWVuZGlmOwoJfQoJCgkvLyBjaGVjayBpZiB0aGUgVXNlckNyZWRlbnRpYWxz IGFyZSBqdXN0
IGNyZWF0ZWQKCWlmKGMub2NsSXNVbmRlZmluZWQoKSkKCXRoZW4KCXsKCQls b2coImFkZGlu
ZyB1c2VyY3JlZHMgdG8gcGFja2FnZSAnIiArIHBhY2submFtZSArICInLiIp OwoJCS8vIFRo
ZSBVc2VyQ3JlZGVudGlhbHMgc2hvdWxkIGdldCBpbiB0aGUgYXV0aGVudGlj YXRpb24gcGFj
a2FnZQoJCXBhY2sucGFja2FnZWRFbGVtZW50ICs9IHJlc3VsdDsKCQkvLyB0 aGUgVXNlckNy
ZWRlbnRpYWxzIHNob3VsZCBnZXQgYXNzaWduZWQgdGhlIFVzZXJDcmVkZW50 aWFscyByb2xl
CgkJcmVzdWx0LmFzc2lnblJvbGUoIkF1dGhlbnRpY2F0aW9uRW5mb3JjZXJQ YXR0ZXJuIiwg
IlVzZXJDcmVkZW50aWFscyIpOwoJfQoJZW5kaWY7Cn0KCm1hcHBpbmcgUGFj a2FnZTo6aW5p
dGlhbGlzZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIocHJvdiA6IENsYXNzKSA6 IENsYXNzCnsK
CWluaXQKCXsKCQl2YXIgcGFjayA6PSBzZWxmLmdldFJvbGVBc3NpZ25tZW50 cygiQXV0aGVu
dGljYXRpb25FbmZvcmNlclBhdHRlcm4iLCAiUGFja2FnZSIpLT5hbnkodHJ1 ZSkub2NsQXNU
eXBlKFBhY2thZ2UpOwoJCQoJCWlmKHByb3Yub2NsSXNVbmRlZmluZWQoKSkK CQl0aGVuCgkJ
ewoJCQlvYmplY3QgcmVzdWx0IDogQ2xhc3MKCQkJewoJCQkJbmFtZSA6PSBw YWNrLnVuaXF1
ZU5hbWUoIkF1dGhlbnRpY2F0aW9uUHJvdmlkZXIiKTsgCgkJCX0KCQl9CgkJ ZWxzZQoJCXsK
CQkJcmVzdWx0IDo9IHByb3Y7CgkJfQoJCWVuZGlmOwoJfQoJCgkvLyBjaGVj ayBpZiB0aGUg
cHJvdmlkZXIgaXMganVzdCBjcmVhdGVkCglpZihwcm92Lm9jbElzVW5kZWZp bmVkKCkpCgl0
aGVuCgl7CgkJLy8gdGhlIHByb3ZpZGVyIHNob3VsZCBiZSBpbiB0aGUgYXV0 aGVudGljYXRp
b24gcGFja2FnZQoJCXBhY2sucGFja2FnZWRFbGVtZW50ICs9IHJlc3VsdDsK CQkvLyB0aGUg
cmVzdWx0IHNob3VsZCBnZXQgYXNzaWduZWQgdGhlIEF1dGhlbnRpY2F0aW9u UHJvdmlkZXIg
cm9sZQoJCXJlc3VsdC5hc3NpZ25Sb2xlKCJBdXRoZW50aWNhdGlvbkVuZm9y Y2VyUGF0dGVy
biIsICJBdXRoZW50aWNhdGlvblByb3ZpZGVyIik7Cgl9CgllbmRpZjsKfQoK LyoqCiAqIEBt
YXBwaW5nIGluaXRpYWxpc2VBdXRoZW50aWNhdGlvbkVuZm9yY2VyCiAqIElu aXRpYWxpc2Vz
IHRoZSBBdXRoZW50aWNhdGlvbkVuZm9yY2VyIHJvbGUsIGlmIHRoYXQgcm9s ZSBpcyBhc3Np
Z25lZCBieSB0aGUgdXNlcgogKiBub3RoaW5nIHJlYWxseSBoYXBwZW5zLCBp ZiBub3QgYSBu
ZXcgQ2xhc3MgaXMgY3JlYXRlZCB3aXRoIHRoZSBuYW1lCiAqICdBdXRoZW50 aWNhdGlvbkVu
Zm9yY2VyJyBhbmQgaXQgaXMgYXNzaWduZWQgdGhlIEF1dGhlbnRpY2F0aW9u RW5mb3JjZXIg
cm9sZS4gSWYgdGhlIG5hbWUKICogJ0F1dGhlbnRpY2F0aW9uRW5mb3JjZXIn IGlzIGFscmVh
ZHkgaW4gdXNlLCBhIG51bWJlciBpcyBhZGRlZCBhdCB0aGUgYmFjayBvZgog KiB0aGUgbmFt
ZSB1bnRpbCBhIHVuaXF1ZSBuYW1lIGlzIGZvdW5kLgogKiovCm1hcHBpbmcg UGFja2FnZTo6
aW5pdGlhbGlzZUF1dGhlbnRpY2F0aW9uRW5mb3JjZXIoKSA6IENsYXNzCnsK CWluaXQKCXsK
CQl2YXIgcGFjayA6PSBzZWxmLmdldFJvbGVBc3NpZ25tZW50cygiQXV0aGVu dGljYXRpb25F
bmZvcmNlclBhdHRlcm4iLCAiUGFja2FnZSIpLT5hbnkodHJ1ZSkub2NsQXNU eXBlKFBhY2th
Z2UpOwoJCXZhciBjIDo9IHNlbGYuZ2V0Um9sZUFzc2lnbm1lbnRzKCJBdXRo ZW50aWNhdGlv
bkVuZm9yY2VyUGF0dGVybiIsICJBdXRoZW50aWNhdGlvbkVuZm9yY2VyIikK CQkJCQkJCQkJ
LT5zZWxlY3QoZSB8IGUub2NsSXNUeXBlT2YoQ2xhc3MpKS0+YW55KHRydWUp Lm9jbEFzVHlw
ZShDbGFzcyk7CgkJaWYobm90IGMub2NsSXNVbmRlZmluZWQoKSkKCQl0aGVu CgkJewoJCQly
ZXN1bHQgOj0gYzsKCQl9CgkJZWxzZQoJCXsKCQkJb2JqZWN0IHJlc3VsdCA6 IENsYXNzCgkJ
CXsKCQkJCW5hbWUgOj0gcGFjay51bmlxdWVOYW1lKCJBdXRoZW50aWNhdGlv bkVuZm9yY2Vy
Iik7CgkJCX0KCQl9CgkJZW5kaWY7Cgl9CgkKCS8vIGNoZWNrIGlmIHRoZSBV c2VyQ3JlZGVu
dGlhbHMgYXJlIGp1c3QgY3JlYXRlZAoJaWYoYy5vY2xJc1VuZGVmaW5lZCgp KQoJdGhlbgoJ
ewoJCS8vIFRoZSBVc2VyQ3JlZGVudGlhbHMgc2hvdWxkIGdldCBpbiB0aGUg YXV0aGVudGlj
YXRpb24gcGFja2FnZQoJCXBhY2sucGFja2FnZWRFbGVtZW50ICs9IHJlc3Vs dDsKCQkvLyB0
aGUgVXNlckNyZWRlbnRpYWxzIHNob3VsZCBnZXQgYXNzaWduZWQgdGhlIFVz ZXJDcmVkZW50
aWFscyByb2xlCgkJcmVzdWx0LmFzc2lnblJvbGUoIkF1dGhlbnRpY2F0aW9u RW5mb3JjZXJQ
YXR0ZXJuIiwgIkF1dGhlbnRpY2F0aW9uRW5mb3JjZXIiKTsKCX0KCWVuZGlm Owp9CgovKioK
ICogQG1hcHBpbmcgaW5pdGlhbGlzZVN1YmplY3QKICogSW5pdGlhbGlzZXMg dGhlIFN1Ympl
Y3Qgcm9sZSwgaWYgdGhhdCByb2xlIGlzIGFzc2lnbmVkIGJ5IHRoZSB1c2Vy CiAqIG5vdGhp
bmcgcmVhbGx5IGhhcHBlbnMsIGlmIG5vdCBhIG5ldyBDbGFzcyBpcyBjcmVh dGVkIHdpdGgg
dGhlIG5hbWUKICogJ1N1YmplY3QnIGFuZCBpdCBpcyBhc3NpZ25lZCB0aGUg U3ViamVjdCBy
b2xlLiBJZiB0aGUgbmFtZQogKiAnU3ViamVjdCcgaXMgYWxyZWFkeSBpbiB1 c2UsIGEgbnVt
YmVyIGlzIGFkZGVkIGF0IHRoZSBiYWNrIG9mCiAqIHRoZSBuYW1lIHVudGls IGEgdW5pcXVl
IG5hbWUgaXMgZm91bmQuCiAqKi8KbWFwcGluZyBQYWNrYWdlOjppbml0aWFs aXNlU3ViamVj
dCgpIDogQ2xhc3MKewoJaW5pdAoJewoJCXZhciBwYWNrIDo9IHNlbGYuZ2V0 Um9sZUFzc2ln
bm1lbnRzKCJBdXRoZW50aWNhdGlvbkVuZm9yY2VyUGF0dGVybiIsICJQYWNr YWdlIiktPmFu
eSh0cnVlKS5vY2xBc1R5cGUoUGFja2FnZSk7CgkJdmFyIGMgOj0gc2VsZi5n ZXRSb2xlQXNz
aWdubWVudHMoIkF1dGhlbnRpY2F0aW9uRW5mb3JjZXJQYXR0ZXJuIiwgIlN1 YmplY3QiKQoJ
CQkJCQkJCQktPnNlbGVjdChlIHwgZS5vY2xJc1R5cGVPZihDbGFzcykpLT5h bnkodHJ1ZSku
b2NsQXNUeXBlKENsYXNzKTsKCQlpZihub3QgYy5vY2xJc1VuZGVmaW5lZCgp KQoJCXRoZW4K
CQl7CgkJCXJlc3VsdCA6PSBjOwoJCX0KCQllbHNlCgkJewoJCQlvYmplY3Qg cmVzdWx0IDog
Q2xhc3MKCQkJewoJCQkJbmFtZSA6PSBwYWNrLnVuaXF1ZU5hbWUoIlN1Ympl Y3QiKTsKCQkJ
fQoJCX0KCQllbmRpZjsKCX0KCQoJLy8gY2hlY2sgaWYgdGhlIFVzZXJDcmVk ZW50aWFscyBh
cmUganVzdCBjcmVhdGVkCglpZihjLm9jbElzVW5kZWZpbmVkKCkpCgl0aGVu Cgl7CgkJLy8g
VGhlIFVzZXJDcmVkZW50aWFscyBzaG91bGQgZ2V0IGluIHRoZSBhdXRoZW50 aWNhdGlvbiBw
YWNrYWdlCgkJcGFjay5wYWNrYWdlZEVsZW1lbnQgKz0gcmVzdWx0OwoJCS8v IHRoZSBVc2Vy
Q3JlZGVudGlhbHMgc2hvdWxkIGdldCBhc3NpZ25lZCB0aGUgVXNlckNyZWRl bnRpYWxzIHJv
bGUKCQlyZXN1bHQuYXNzaWduUm9sZSgiQXV0aGVudGljYXRpb25FbmZvcmNl clBhdHRlcm4i
LCAiU3ViamVjdCIpOwoJfQoJZW5kaWY7Cn0=
--------------080805080804080506080406--
|
|
|
Re: [QVTO] runtimeexception : VarParameterImpl cannot be cast to MappingParameter [message #495119 is a reply to message #495101] |
Tue, 03 November 2009 20:13 |
Eclipse User |
|
|
|
Originally posted by: vanbeerst.gmail.com
This is a multi-part message in MIME format.
--------------080306010006050601060002
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit
Hi Radek,
Sorry but to recreate the exception, you still need another file :
- PatternsLib.qvto the library used in the transformation
(authenticationenforcer.qvto)
Now you should be able to reproduce the error.
Regards,
Tony.
--------------080306010006050601060002
Content-Type: text/plain;
name="PatternsLib.qvto"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="PatternsLib.qvto"
bW9kZWx0eXBlIFVNTCAic3RyaWN0IiB1c2VzIHVtbCgnaHR0cDovL3d3dy5l Y2xpcHNlLm9y
Zy91bWwyLzMuMC4wL1VNTCcpOwoKbGlicmFyeSBQYXR0ZXJuc0xpYihVTUwp OwoKLyoqCiAq
IEBxdWVyeSBlbGVtZW50c1dpdGhTdGVyZW90eXBlCiAqIFJldHVybnMgYWxs IGVsZW1lbnRz
IGluIHRoZSBwYWNrYWdlIHdoaWNoIGhhdmUgdGhlIGdpdmVuCiAqIHN0ZXJl b3R5cGUgYXBw
bGllZC4gV2hlbiB0aGUgcGFja2FnZSBjb250YWlucyBuZXN0ZWQgcGFja2Fn ZXMsCiAqIHRo
b3NlIHBhY2thZ2VzIGFyZSBzZWFyY2hlZCBhbHNvLgogKiBAY29udGV4dCBQ YWNrYWdlIHRo
ZSBwYWNrYWdlIGluIHdoaWNoIHRvIHNlYXJjaAogKiBAcGFyYW0gc3QgdGhl IHN0ZXJlb3R5
cGUgdG8gc2VhcmNoIChxdWFsaWZpZWQgbmFtZSkKICogQHJldHVybiBTZXQo RWxlbWVudCkg
dGhlIGVsZW1lbnRzIHdpdGggdGhlIHN0ZXJlb3R5cGUgYXBwbGllZAogKiov CiBxdWVyeSBQ
YWNrYWdlOjplbGVtZW50c1dpdGhTdGVyZW90eXBlKHN0IDogU3RyaW5nKSA6 IFNldChFbGVt
ZW50KQogewogCS8vIHRoZSByZXR1cm52YWx1ZSBmb3IgdGhlIHF1ZXJ5CiAJ dmFyIHJldHVy
blZhbHVlIDogU2V0KEVsZW1lbnQpIDo9IFNldCB7fTsKIAkvLyBpdGVyYXRl IG92ZXIgYWxs
IGVsZW1lbnRzIGluIHRoZSBwYWNrYWdlCiAJc2VsZi5wYWNrYWdlZEVsZW1l bnQtPmZvckVh
Y2goZSkKIAl7CQogCQkvLyBjaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50 IGhhcyB0aGUg
c3RlcmVvdHlwZSBhcHBsaWVkCiAJCWlmKG5vdCBlLmdldEFwcGxpZWRTdGVy ZW90eXBlKHN0
KS5vY2xJc1VuZGVmaW5lZCgpKQogCQl0aGVuCiAJCXsJCiAJCQkvLyBhZGQg dGhlIGVsZW1l
bnQgdG8gdGhlIHJldHVyblZhbHVlIAogCQkJcmV0dXJuVmFsdWUgKz0gZTsK IAkJfQogCQll
bmRpZjsKIAkJCiAJCS8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQg aXMgYSBwYWNr
YWdlIGl0c2VsZiAobmVzdGVkKQogCQlpZihlLm9jbElzS2luZE9mKFBhY2th Z2UpKQogCQl0
aGVuCiAJCXsKIAkJCS8vIHdlIGNoZWNrIGFsbCBlbGVtZW50cyBpbiB0aGUg bmVzdGVkIHBh
Y2thZ2UgKHJlY3Vyc2lvbikKIAkJCXJldHVyblZhbHVlIDo9IHJldHVyblZh bHVlLT51bmlv
bihlLm9jbEFzVHlwZShQYWNrYWdlKS5tYXAgZWxlbWVudHNXaXRoU3RlcmVv dHlwZShzdCkp
OwogCQl9CiAJCWVuZGlmOwogCX07CiAJCiAJcmV0dXJuIHJldHVyblZhbHVl OwogfQogCiAv
KioKICAqIEBoZWxwZXIgcHJlcGFyZVByb2ZpbGUKICAqIENoZWNrcyBpZiB0 aGUgY29udGV4
dCBQYWNrYWdlIGhhcyB0aGUgcHJvZmlsZSBhcHBsaWVkIHRvIHdoaWNoCiAg KiB0aGUgZ2l2
ZW4gc3RlcmVvdHlwZSBiZWxvbmdzLiBJZiBub3QgaXQgYXBwbGllcyB0aGUg cHJvZmlsZSB0
bwogICogdGhlIFBhY2thZ2UuCiAgKiBAY29udGV4dCBQYWNrYWdlIHRoZSBw YWNrYWdlIHRv
IGNoZWNrCiAgKiBAcGFyYW0gc3QgdGhlIHN0ZXJlb3R5cGUgZnJvbSB3aGlj aCB0byBkZXJp
dmUgdGhlIHByb2ZpbGUKICAqKi8KIGhlbHBlciBQYWNrYWdlOjpwcmVwYXJl UHJvZmlsZShz
dCA6IFN0ZXJlb3R5cGUpCiB7CiAJLy8gY2hlY2sgaWYgYSBwcm9maWxlIGlz IG5lY2Vzc2Fy
eQogCWlmKG5vdCBzdC5nZXRQcm9maWxlKCkub2NsSXNVbmRlZmluZWQoKSkK IAl0aGVuCiAJ
ewogCQkvLyBjaGVjayBpZiB0aGUgcHJvZmlsZSBpcyBhcHBsaWVkIHRvIHRo ZSBwYWNrYWdl
CiAJCWlmKG5vdCBzZWxmLmlzUHJvZmlsZUFwcGxpZWQoc3QuZ2V0UHJvZmls ZSgpKSkKIAkJ
dGhlbgogCQl7CiAJCQkvLyBhcHBseSB0aGUgcHJvZmlsZSB0byB0aGUgcGFj a2FnZQoJIAkJ
c2VsZi5hcHBseVByb2ZpbGUoc3QuZ2V0UHJvZmlsZSgpKTsKIAkJfQoJCWVu ZGlmOwogCX0K
IAllbmRpZjsKIH0KIAogLyoqCiAgKiBAbWFwcGluZyBjcmVhdGVDb3B5SW4K ICAqIENyZWF0
ZXMgYSBkZWVwIGNsb25lIG9mIHRoZSBjb250ZXh0IGVsZW1lbnQgYW5kIGFk ZHMgaXQgdG8g
dGhlIGdpdmVuIHBhY2thZ2UuCiAgKiBJZiB0aGUgY29udGV4dCBlbGVtZW50 IGhhcyBhIHN0
ZXJlb3R5cGUgYmVsb25naW5nIHRvIGEgcHJvZmlsZSB3aGljaCBpcyBub3QK ICAqIGFwcGxp
ZWQgdG8gdGhlIHRhcmdldCwgdGhlIHByb2ZpbGUgaXMgYXBwbGllZCB0byB0 aGUgdGFyZ2V0
IGZpcnN0LgogICogQGNvbnRleHQgUGFja2FnZWFibGVFbGVtZW50IHRoZSBl bGVtZW50IHRv
IGNvcHkKICAqIEBwYXJhbSB0YXJnZXQgdGhlIHBhY2thZ2UgaW4gd2hpY2gg dGhlIHJlc3Vs
dGluZyBlbGVtZW50IHNob3VsZCBiZSBwdXQKICAqIEByZXR1cm4gUGFja2Fn ZWFibGVFbGVt
ZW50IHRoZSBjb3B5CiAgKiovCiBtYXBwaW5nIFBhY2thZ2VhYmxlRWxlbWVu dDo6Y3JlYXRl
Q29weUluKGlub3V0IHRhcmdldCA6IFBhY2thZ2UpIDogUGFja2FnZWFibGVF bGVtZW50CiB7
CiAJaW5pdAogCXsKIAkJLy8gY3JlYXRlIGEgZGVlcCBjbG9uZSBvZiB0aGUg Y29udGV4dCBl
bGVtZW50CiAJCXJlc3VsdCA6PSBzZWxmLmRlZXBjbG9uZSgpLm9jbEFzVHlw ZShDbGFzcyk7
CiAJfQogCQogCS8vIEFkZCB0aGUgbmV3IGVsZW1lbnQgdG8gdGhlIHRhcmdl dCBwYWNrYWdl
CiAJdGFyZ2V0LnBhY2thZ2VkRWxlbWVudCArPSByZXN1bHQ7CiAJCiAJLy8g YXBwbHkgYWxs
IHN0ZXJlb3R5cGVzICh0aGlzIGlzIG5vdCBkb25lIHdpdGggZGVlcGNsb25l KQogCXNlbGYu
Z2V0QXBwbGllZFN0ZXJlb3R5cGVzKCktPmZvckVhY2goc3QpCiAJewkKIAkJ Ly8gbWFrZSBz
dXJlIHRoZSBjb3JyZWN0IHByb2ZpbGUgaXMgYXBwbGllZCB0byB0aGUgdGFy Z2V0IHBhY2th
Z2UKIAkJdGFyZ2V0LnByZXBhcmVQcm9maWxlKHN0KTsKIAkJLy8gYXBwbHkg dGhlIHN0ZXJl
b3R5cGUKCQlyZXN1bHQuYXBwbHlTdGVyZW90eXBlKHN0KTsKIAl9OwogfQog CiAvKioKICAq
IEBtYXBwaW5nIGNvcHlBc3NvY0luCiAgKiBDb3BpZXMgdGhlIGNvbnRleHQg YXNzb2NpYXRp
b24gYW5kIHBsYWNlcyBpdCBpbiB0aGUgZ2l2ZW4gdGFyZ2V0IHBhY2thZ2Uu CiAgKiBJdCBk
b2VzIG5vdCBqdXN0IGNvcHkgdGhlIGFzc29jaWF0aW9uIGVuZHMgKHByb3Bl cnRpZXMpLCBi
dXQgaXQgdHJpZXMgdG8KICAqIHJlc29sdmUgdGhlbSBmaXJzdC4gU28gSWYg dGhlIGFzc29j
aWF0aW9uIGVuZHMgYXJlIG1hcHBlZCB0byBhbm90aGVyIGVsZW1lbnQKICAq IGJlZm9yZSwg
aXQgdXNlcyB0aGUgbWFwcGluZ3Mgb2YgdGhlIGVuZHMgaW5zdGVhZCBvZiB0 aGUgZW5kcyBp
dHNlbGYuIAogICogV2hlbiBhbiBhc3NvY2lhdGlvbiBlbmQgb2YgdGhlIGNv bnRleHQgYXNz
b2NpYXRpb24gaXMgbWFwcGVkIG9udG8gbXVsdGlwbGUKICAqIGVsZW1lbnRz LCBhbGwgb2Yg
dGhlbSBhcmUgYWRkZWQgYXMgcHJvcGVydHkgb2YgdGhlIHJlc3VsdGluZyBh c3NvY2lhdGlv
bi4KICAqIFdoZW4gYW4gYXNzb2NpYXRpb24gZW5kIGlzIG5vdCBtYXBwZWQs IHRoZSBvcmln
aW5hbCBvbmUgaXMganVzdCB1c2VkLgogICoKICAqIFRIVVMgbWFrZSBzdXJl IHlvdSBtYXAg
dGhlIGFzc29jaWF0aW9uIGVuZHMgYmVmb3JlIG1hcHBpbmcgdGhlIGFzc29j aWF0aW9uISEh
CiAgKgogICogQGNvbnRleHQgQXNzb2NpYXRpb24gdGhlIGFzc29jaWF0aW9u IHRvIGNvcHku
CiAgKiBAcGFyYW0gdGFyZ2V0IHRoZSBwYWNrYWdlIGluIHdoaWNoIHRoZSBy ZXN1bHRpbmcg
YXNzb2NpYXRpb24gc2hvdWxkIGJlIHB1dC4KICAqIEByZXR1cm4gQXNzb2Np YXRpb24gdGhl
IHJlc3VsdGluZyBhc3NvY2lhdGlvbi4KICAqKi8gCiBtYXBwaW5nIEFzc29j aWF0aW9uOjpj
b3B5QXNzb2NJbihpbm91dCB0YXJnZXQgOiBQYWNrYWdlKSA6IEFzc29jaWF0 aW9uCiB7CiAJ
aW5pdAogCXsKIAkJLy8gd2UgY2xvbmUgdGhlIGFzc29jaWF0aW9uCiAJCXJl c3VsdCA6PSBz
ZWxmLmNsb25lKCkub2NsQXNUeXBlKEFzc29jaWF0aW9uKTsKIAl9CiAJCiAJ Ly8gaXRlcmF0
ZSBvdmVyIGV2ZXJ5IHJlbGF0ZWQgZWxlbWVudCAodGhlIGFzc29jaWF0aW9u IGVuZHMpCiAJ
c2VsZi5yZWxhdGVkRWxlbWVudC0+Zm9yRWFjaChlKQogCXsKIAkJLy8gcmVz b2x2ZSB0aGUg
YXNzb2NpYXRpb24gZW5kCiAJCXZhciBlbCA6PSBlLnJlc29sdmUoKTsKIAkJ Ly8gY2hlY2sg
aWYgdGhlIGVuZCBpcyBhbHJlYWR5IG1hcHBlZCBvbnRvIGFub3RoZXIgZWxl bWVudAogCQlp
ZihlbC0+aXNFbXB0eSgpKQogCQl0aGVuCiAJCXsKIAkJCS8vIHRoZSBhc3Nv Y2lhdGlvbiBl
bmQgaXMgbm90IG1hcHBlZCwgc28gdXNlIHRoZSBvcmlnaW5hbCBvbmUKIAkJ CWVsICs9IGU7
CiAJCX0KIAkJZW5kaWY7CiAJCQogCQkvLyBpdGVyYXRlIG92ZXIgZXZlcnkg bWFwcGVkIGVu
ZAogCQllbC0+Zm9yRWFjaChhc3NFbmQpCiAJCXsKIAkJCS8vIGFkZCBhIG5l dyBwcm9wZXJ0
eSBhcyBlbmQgdG8gdGhlIGFzc29jaWF0aW9uCiAJCQlyZXN1bHQubWVtYmVy RW5kICs9IAoJ
IAkJCW9iamVjdCBQcm9wZXJ0eQogCQkJCXsKCSAJCQkJdHlwZSA6PSBhc3NF bmQub2NsQXNU
eXBlKFR5cGUpOwogCQkJCQlvd25pbmdBc3NvY2lhdGlvbiA6PSByZXN1bHQ7 CiAJCQkJfTsK
IAkJfTsKIAl9OwogCQogCS8vIGFkZCB0aGUgcmVzdWx0aW5nIGFzc29jaWF0 aW9uIHRvIHRo
ZSB0YXJnZXQgcGFja2FnZQogCXRhcmdldC5wYWNrYWdlZEVsZW1lbnQgKz0g cmVzdWx0Owog
CS8vIG1ha2Ugc3VyZSBhbGwgc3RlcmVvdHlwZXMgYXJlIGFwcGxpZWQgdG8g dGhlIHJlc3Vs
dAogCXNlbGYuZ2V0QXBwbGllZFN0ZXJlb3R5cGVzKCktPmZvckVhY2goc3Qp CiAJewkKIAkJ
Ly8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0IHByb2ZpbGUgaXMgYXBwbGllZCB0 byB0aGUgdGFy
Z2V0IHBhY2thZ2UKIAkJdGFyZ2V0LnByZXBhcmVQcm9maWxlKHN0KTsKIAkJ Ly8gYXBwbHkg
dGhlIHN0ZXJlb3R5cGUKCQlyZXN1bHQuYXBwbHlTdGVyZW90eXBlKHN0KTsK IAl9OwogfQog
CiAvKioKICAqIEBtYXBwaW5nIGNvcHlEZXBlbmRlbmN5SW4KICAqIENvcGll cyB0aGUgY29u
dGV4dCBkZXBlbmRlbmN5IGFuZCBwbGFjZXMgaXQgaW4gdGhlIGdpdmVuIHRh cmdldCBwYWNr
YWdlLgogICogSXQgZG9lcyBub3QganVzdCBjb3B5IHRoZSBkZXBlbmRlbmN5 IGVuZHMgKGNs
aWVudCAmIHN1cHBsaWVyKSwgYnV0IGl0IHRyaWVzIHRvCiAgKiByZXNvbHZl IHRoZW0gZmly
c3QuIFNvIElmIHRoZSBkZXBlbmRlbmN5IGVuZHMgYXJlIG1hcHBlZCB0byBh bm90aGVyIGVs
ZW1lbnQKICAqIGJlZm9yZSwgaXQgdXNlcyB0aGUgbWFwcGluZ3Mgb2YgdGhl IGVuZHMgaW5z
dGVhZCBvZiB0aGUgZW5kcyBpdHNlbGYuIAogICogV2hlbiBhIGRlcGVuZGVu Y3kgZW5kIGlz
IG5vdCBtYXBwZWQsIHRoZSBvcmlnaW5hbCBvbmUgaXMganVzdCB1c2VkLgog ICoKICAqIFRI
VVMgbWFrZSBzdXJlIHlvdSBtYXAgdGhlIGRlcGVuZGVuY3kgZW5kcyBiZWZv cmUgbWFwcGlu
ZyB0aGUgZGVwZW5kZW5jeSEhIQogICoKICAqIEBjb250ZXh0IERlcGVuZGVu Y3kgdGhlIGRl
cGVuZGVuY3kgdG8gY29weS4KICAqIEBwYXJhbSB0YXJnZXQgdGhlIHBhY2th Z2UgaW4gd2hp
Y2ggdGhlIHJlc3VsdGluZyBkZXBlbmRlbmN5IHNob3VsZCBiZSBwdXQuCiAg KiBAcmV0dXJu
IERlcGVuZGVuY3kgdGhlIHJlc3VsdGluZyBkZXBlbmRlbmN5LgogICoqLyAK IG1hcHBpbmcg
RGVwZW5kZW5jeTo6Y29weURlcGVuZGVuY3lJbihpbm91dCB0YXJnZXQgOiBQ YWNrYWdlKSA6
IERlcGVuZGVuY3kKIHsKIAkvLyBpdGVyYXRlIG92ZXIgZXZlcnkgY2xpZW50 CiAJc2VsZi5j
bGllbnQtPmZvckVhY2goZSkKIAl7CiAJCS8vIHJlc29sdmUgdGhlIGNsaWVu dAogCQl2YXIg
ZWwgOj0gZS5yZXNvbHZlKCk7CiAJCS8vIGNoZWNrIGlmIHRoZSBjbGllbnQg aXMgYWxyZWFk
eSBtYXBwZWQgb250byBhbm90aGVyIGVsZW1lbnQKIAkJaWYoZWwtPmlzRW1w dHkoKSkKIAkJ
dGhlbgogCQl7CiAJCQkvLyB0aGUgY2xpZW50IGlzIG5vdCBtYXBwZWQsIHNv IHVzZSB0aGUg
b3JpZ2luYWwgb25lCiAJCQllbCArPSBlOwogCQl9CiAJCWVuZGlmOwogCQkK IAkJLy8gaXRl
cmF0ZSBvdmVyIGV2ZXJ5IG1hcHBlZCBjbGllbnQKIAkJZWwtPmZvckVhY2go Y2xpZW50KQog
CQl7CiAJCQkvLyBhZGQgdGhlIG1hcHBlZCBjbGllbnQgYXMgY2xpZW50IG9m IHRoZSBkZXBl
bmRlbmN5CiAJCQlyZXN1bHQuY2xpZW50ICs9IGNsaWVudC5vY2xBc1R5cGUo TmFtZWRFbGVt
ZW50KTsgCiAJCX07CiAJfTsKIAkKIAkvLyBpdGVyYXRlIG92ZXIgZXZlcnkg c3VwcGxpZXIK
IAlzZWxmLnN1cHBsaWVyLT5mb3JFYWNoKGUpCiAJewogCQkvLyByZXNvbHZl IHRoZSBzdXBw
bGllcgogCQl2YXIgZWwgOj0gZS5yZXNvbHZlKCk7CiAJCS8vIGNoZWNrIGlm IHRoZSBzdXBw
bGllciBpcyBhbHJlYWR5IG1hcHBlZCBvbnRvIGFub3RoZXIgZWxlbWVudAog CQlpZihlbC0+
aXNFbXB0eSgpKQogCQl0aGVuCiAJCXsKIAkJCS8vIHRoZSBzdXBwbGllciBp cyBub3QgbWFw
cGVkLCBzbyB1c2UgdGhlIG9yaWdpbmFsIG9uZQogCQkJZWwgKz0gZTsKIAkJ fQogCQllbmRp
ZjsKIAkJCiAJCS8vIGl0ZXJhdGUgb3ZlciBldmVyeSBtYXBwZWQgc3VwcGxp ZXIKIAkJZWwt
PmZvckVhY2goc3VwcGxpZXIpCiAJCXsKIAkJCS8vIGFkZCB0aGUgbWFwcGVk IHN1cHBsaWVy
IGFzIHN1cHBsaWVyIG9mIHRoZSBkZXBlbmRlbmN5CiAJCQlyZXN1bHQuc3Vw cGxpZXIgKz0g
c3VwcGxpZXIub2NsQXNUeXBlKE5hbWVkRWxlbWVudCk7CiAJCX07CiAJfTsK IAkKIAkvLyBh
ZGQgdGhlIHJlc3VsdGluZyBhc3NvY2lhdGlvbiB0byB0aGUgdGFyZ2V0IHBh Y2thZ2UKIAl0
YXJnZXQucGFja2FnZWRFbGVtZW50ICs9IHJlc3VsdDsKIAkvLyBtYWtlIHN1 cmUgYWxsIHN0
ZXJlb3R5cGVzIGFyZSBhcHBsaWVkIHRvIHRoZSByZXN1bHQKIAlzZWxmLmdl dEFwcGxpZWRT
dGVyZW90eXBlcygpLT5mb3JFYWNoKHN0KQogCXsJCiAJCS8vIG1ha2Ugc3Vy ZSB0aGUgY29y
cmVjdCBwcm9maWxlIGlzIGFwcGxpZWQgdG8gdGhlIHRhcmdldCBwYWNrYWdl CiAJCXRhcmdl
dC5wcmVwYXJlUHJvZmlsZShzdCk7CiAJCS8vIGFwcGx5IHRoZSBzdGVyZW90 eXBlCgkJcmVz
dWx0LmFwcGx5U3RlcmVvdHlwZShzdCk7CiAJfTsKIH0KIAogLyoqCiAgKiBA cXVlcnkgZ2V0
UmVsYXRlZEVsZW1lbnRzCiAgKiBSZXR1cm5zIGFsbCBlbGVtZW50cyB0aGF0 IGFyZSBjb25u
ZWN0ZWQgdG8gdGhlIGNvbnRleHQKICAqIGVsZW1lbnQgdGhyb3VnaCBzb21l IGtpbmQgb2Yg
cmVsYXRpb25zaGlwLgogICogQGNvbnRleHQgRWxlbWVudCB0aGUgZWxlbWVu dCBvZiB3aGlj
aCB0aGUgcmVsYXRlZCBlbGVtZW50cyBuZWVkIHRvIGJlIHJldHVybmVkCiAg KiBAcmV0dXJu
IFNldChFbGVtZW50KSB0aGUgZWxlbWVudHMgY29ubmVjdGVkIHRvIHRoZSBj b250ZXh0IGVs
ZW1lbnQgdGhyb3VnaCBhIHJlbGF0aW9uc2hpcAogICoqLwogcXVlcnkgRWxl bWVudDo6Z2V0
UmVsYXRlZEVsZW1lbnRzKCkgOiBTZXQoRWxlbWVudCkKIHsKIAkvLyBpbml0 aWFsaXplIHRo
ZSByZXN1bHQgd2l0aCBhbiBlbXB0eSBzZXQuCiAJdmFyIHJldHVyblZhbHVl IDogU2V0KEVs
ZW1lbnQpIDo9IFNldCB7fTsKIAkvLyBpdGVyYXRlIG92ZXIgYWxsIHJlbGF0 aW9uc2hpcHMg
dGhpcyBlbGVtZW50IGlzIGludm9sdmVkIGluCiAJc2VsZi5nZXRSZWxhdGlv bnNoaXBzKCkt
PmZvckVhY2gocmVsKQogCXsKIAkJLy8gYWRkIGFsbCByZWxhdGVkIGVsZW1l bnRzIG9mIHRo
ZSByZWxhdGlvbnNoaXAgdGhhdCBhcmUgbm90IHRoZSBjb250ZXh0IGVsZW1l bnQKIAkJcmV0
dXJuVmFsdWUgOj0gcmV0dXJuVmFsdWUtPnVuaW9uKHJlbC5yZWxhdGVkRWxl bWVudC0+c2Vs
ZWN0KGUgfCBlIDw+IHNlbGYpKTsKIAl9OwogCQogCXJldHVybiByZXR1cm5W YWx1ZTsKIH0K
IAogLyoqCiAqIEBoZWxwZXIgaW5pdGlhbGlzZVBhdHRlcm4KICogQWRkcyB0 aGUgcGF0dGVy
biBpbmZvIHRvIHRoZSBtb2RlbC4gVGhpcwogKiBtZWFucyB0aGF0IGNsYXNz ZXMgZm9yIHRo
ZSBwYXR0ZXJuIGFuZCBpdCdzIHJvbGVzIGFyZSBhZGRlZAogKiB0byB0aGUg Y29udGV4dCBt
b2RlbCwgc28gcm9sZXMgY2FuIGJlIGFzc2lnbmVkIGFmdGVyd2FyZC4KICoK ICogTm90ZSB0
aGF0IHRoZSBnaXZlbiBwYXR0ZXJuIHNob3VsZCBjb250YWluIDEgbW9kZWwg ZWxlbWVudCBp
biB3aGljaAogKiAxIHBhdHRlcm4gZWxlbWVudCByZXNpZGVzLiBUaGUgZGlm ZmVyZW50IHJv
bGVzIG9mIHRoZSBwYXR0ZXJuIHNob3VsZCAKICogYWxzbyBzaXQgaW4gdGhl IG1vZGVsIGVs
ZW1lbnQgYW5kIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIHBhdHRlcm4K ICogZWxlbWVu
dCB3aXRoIHNvbWUga2luZCBvZiByZWxhdGlvbnNoaXAuCiAqIFRoaXMgaXMg bm90IGNoZWNr
ZWQsIHNvIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVy IHRvIGVuc3Vy
ZSB0aGlzIQogKiAKICogQGNvbnRleHQgTW9kZWwgdGhlIG1vZGVsIHRvIHdo aWNoIHRoZSBw
YXR0ZXJuIHNob3VsZCBiZSBhcHBsaWVkCiAqIEBwYXJhbSBwYXQgdGhlIHBh dHRlcm4gdGhh
dCdzIGJlaW5nIGFwcGxpZWQgKHRoZSBtb2RlbCBlbGVtZW50KQogKiBAcmV0 dXJuIEJvb2xl
YW4gaW5kaWNhdGVzIHN1Y2Nlc3MKICoqLwpoZWxwZXIgTW9kZWw6OmluaXRp YWxpc2VQYXR0
ZXJuKHBhdCA6IE1vZGVsKSA6IEJvb2xlYW4KewkKCS8vIEdldCB0aGUgcGF0 dGVybiBjbGFz
cyBvZiB0aGUgZ2l2ZW4gcGF0dGVybgoJdmFyIHBhdHRlcm4gOj0gcGF0LmVs ZW1lbnRzV2l0
aFN0ZXJlb3R5cGUoInBhdHRlcm5zOjpQYXR0ZXJuIiktPmFueSh0cnVlKS5v Y2xBc1R5cGUo
Q2xhc3MpOwoJLy8gY2hlY2sgaWYgdGhlIHBhdHRlcm4gZXhpc3RzCglpZihw YXR0ZXJuLm9j
bElzVW5kZWZpbmVkKCkpCgl0aGVuCgl7CgkJbG9nKCJbUGF0dGVybnNMaWIg OjogRXJyb3Jd
IE5vIHBhdHRlcm4gZWxlbWVudCBmb3VuZCBpbiB0aGUgcGF0dGVybiBpbnB1 dC4iKTsKCQly
ZXR1cm4gZmFsc2U7Cgl9CgllbmRpZjsKCQoJLy8gY2hlY2sgaWYgdGhlIHBh dHRlcm4gaXMg
YWxyZWFkeSBwcmVzZW50IGluIHRoZSBtb2RlbAoJdmFyIG1vZGVsUGF0dGVy biA6PSAoc2Vs
Zi5lbGVtZW50c1dpdGhTdGVyZW90eXBlKCJwYXR0ZXJuczo6UGF0dGVybiIp LT5jb2xsZWN0
KG9jbEFzVHlwZShDbGFzcykpKVtuYW1lID0gcGF0dGVybi5uYW1lXS0+YW55 KHRydWUpOwoJ
aWYobW9kZWxQYXR0ZXJuLm9jbElzVW5kZWZpbmVkKCkpCgl0aGVuCgl7CgkJ Ly8gdGhlIHBh
dHRlcm4gZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1vZGVsLCBjcmVhdGUgaXQK CQltb2RlbFBh
dHRlcm4gOj0gcGF0dGVybi5tYXAgY3JlYXRlQ29weUluKHNlbGYpLm9jbEFz VHlwZShDbGFz
cyk7Cgl9CgllbmRpZjsKCQoJLy8gZ2V0IGFsbCByZWxhdGVkIGVsZW1lbnRz IG9mIHRoZSBw
YXR0ZXJuCgl2YXIgcmVscyA6PSBwYXR0ZXJuLmdldFJlbGF0ZWRFbGVtZW50 cygpLT5jb2xs
ZWN0KG9jbEFzVHlwZShDbGFzcykpOwoJCgkvLyBnZXQgcm9sZXMgZGVmaW5l ZCBmb3IgdGhl
IHBhdHRlcm4KCXZhciByb2xlcyA6PSByZWxzLT5zZWxlY3QoZSB8IG5vdCBl LmdldEFwcGxp
ZWRTdGVyZW90eXBlKCJwYXR0ZXJuczo6Um9sZSIpLm9jbElzVW5kZWZpbmVk KCkpOyAKCS8v
IGdldCBhbGwgcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXR0ZXJuIGlu IHRoZSBtb2Rl
bCAob25seSB0aGVpciBuYW1lcykKCXZhciBtb2RlbFJvbGVzIDo9IG1vZGVs UGF0dGVybi5n
ZXRSZWxhdGVkRWxlbWVudHMoKQoJCQkJCQkJLT5zZWxlY3QoZSB8IG5vdCBl LmdldEFwcGxp
ZWRTdGVyZW90eXBlKCJwYXR0ZXJuczo6Um9sZSIpLm9jbElzVW5kZWZpbmVk KCkpCgkJCQkJ
CQktPmNvbGxlY3Qob2NsQXNUeXBlKE5hbWVkRWxlbWVudCkubmFtZSk7CgkK CS8vIGNoZWNr
IGlmIGVhY2ggcm9sZSBpcyBwcmVzZW50IGluIHRoZSBtb2RlbAoJcm9sZXMt PmZvckVhY2go
cm9sZSkKCXsKCQlpZihub3QgbW9kZWxSb2xlcy0+aW5jbHVkZXMocm9sZS5u YW1lKSkKCQl0
aGVuCgkJewoJCQkvLyB0aGUgcm9sZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUg bW9kZWwKCQkJ
Ly8gY3JlYXRlIHRoZSByb2xlCgkJCXJvbGUtPm1hcCBjcmVhdGVDb3B5SW4o c2VsZik7CgkJ
CQoJCQkvLyB0aGUgcm9sZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvIHRoZSBw YXR0ZXJuCgkJ
CXZhciBkZXAgOj0gcm9sZS5nZXRSZWxhdGlvbnNoaXBzKCktPnNlbGVjdChy IHwgci5yZWxh
dGVkRWxlbWVudC0+aW5jbHVkZXMocGF0dGVybikpLT5hbnkodHJ1ZSk7CgkJ CWlmKGRlcC5v
Y2xJc1VuZGVmaW5lZCgpKQoJCQl0aGVuCgkJCXsKCQkJCS8vIHRoaXMgc2hv dWxkIG5vdCBo
YXBwZW4gc2luY2Ugd2UgZ290IHRoZSByb2xlIGJ5IGNhbGxpbmcgJ2dldFJl bGF0ZWRFbGVt
ZW50cycuCgkJCQlsb2coIltQYXR0ZXJuc0xpYiA6OiBFcnJvcl0gRm91bmQg YSByb2xlIGlu
IHRoZSBwYXR0ZXJuIHdoaWNoIGlzIG5vdCBjb25uZWN0ZWQgdG8gdGhlIHBh dHRlcm4uIik7
CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJZW5kaWY7CgkJCQoJCQkvLyB0 aGUgY29ubmVj
dGlvbiBzaG91bGQgYWxzbyBiZSBhZGRlZCB0byB0aGUgbW9kZWwKCQkJZGVw Lm9jbEFzVHlw
ZShEZXBlbmRlbmN5KS5tYXAgY29weURlcGVuZGVuY3lJbihzZWxmKTsKCQl9 CgkJZW5kaWY7
Cgl9OwoJCgkvLyBnZXQgdGhlIGNob2ljZXMgZGVmaW5lZCBpbiB0aGUgcGF0 dGVybgoJdmFy
IGNob2ljZXMgOj0gcmVscy0+c2VsZWN0KGUgfCBub3QgZS5nZXRBcHBsaWVk U3RlcmVvdHlw
ZSgicGF0dGVybnM6OkNob2ljZSIpLm9jbElzVW5kZWZpbmVkKCkpOwoJLy8g Z2V0IHRoZSBu
YW1lcyBvZiBhbGwgY2hvaWNlcyBkZWZpbmVkIGluIHRoZSBtb2RlbAoJdmFy IG1vZGVsQ2hv
aWNlcyA6PSBtb2RlbFBhdHRlcm4uZ2V0UmVsYXRlZEVsZW1lbnRzKCkKCQkJ CQkJCS0+c2Vs
ZWN0KCBlIHwgbm90IGUuZ2V0QXBwbGllZFN0ZXJlb3R5cGUoInBhdHRlcm5z OjpDaG9pY2Ui
KS5vY2xJc1VuZGVmaW5lZCgpKQoJCQkJCQkJLT5jb2xsZWN0KG9jbEFzVHlw ZShOYW1lZEVs
ZW1lbnQpLm5hbWUpOwoJLy8gY2hlY2sgaWYgZWFjaCBjaG9pY2UgaXMgcHJl c2VudCBpbiB0
aGUgbW9kZWwKCWNob2ljZXMtPmZvckVhY2goY2hvaWNlKQoJewoJCWlmKG5v dCBtb2RlbENo
b2ljZXMtPmluY2x1ZGVzKGNob2ljZS5uYW1lKSkKCQl0aGVuCgkJewoJCQkv LyB0aGUgY2hv
aWNlIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtb2RlbAoJCQkvLyBjcmVhdGUg dGhlIGNob2lj
ZQoJCQljaG9pY2UtPm1hcCBjcmVhdGVDb3B5SW4oc2VsZik7CgkJCQoJCQkv LyB0aGUgY2hv
aWNlIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIHBhdHRlcm4KCQkJdmFy IGRlcCA6PSBj
aG9pY2UuZ2V0UmVsYXRpb25zaGlwcygpLT5zZWxlY3QoYyB8IGMucmVsYXRl ZEVsZW1lbnQt
PmluY2x1ZGVzKHBhdHRlcm4pKS0+YW55KHRydWUpOwoJCQlpZihkZXAub2Ns SXNVbmRlZmlu
ZWQoKSkKCQkJdGhlbgoJCQl7CgkJCQkvLyB0aGlzICBzaG91bGQgbm90IGhh cHBlbiBzaW5j
ZSB3ZSBnb3QgdGhlIGNob2ljZSBieSBjYWxsaW5nICdnZXRSZWxhdGVkRWxl bWVudHMnLgoJ
CQkJbG9nKCJbUGF0dGVybnNMaWIgOjogRXJyb3JdIEZvdW5kIGEgY2hvaWNl IGluIHRoZSBw
YXR0ZXJuIHdoaWNoIGlzIG5vdCBjb25uZWN0ZWQgdG8gdGhlIHBhdHRlcm4u Iik7CgkJCQly
ZXR1cm4gZmFsc2U7CgkJCX0KCQkJZW5kaWY7CgkJCQoJCQkvLyB0aGUgY29u bmVjdGlvbiBz
aG91bGQgYWxzbyBiZSBhZGRlZCB0byB0aGUgbW9kZWwKCQkJZGVwLm9jbEFz VHlwZShEZXBl
bmRlbmN5KS5tYXAgY29weURlcGVuZGVuY3lJbihzZWxmKTsKCQkJCgkJCS8v IFRoZSBkaWZm
ZXJlbnQgcG9zc2liaWxpdGllcyBzaG91bGQgYWxzbyBiZSBhZGRlZCB0byB0 aGUgbW9kZWwK
CQkJdmFyIHBvc3NpYmlsaXRpZXMgOj0gY2hvaWNlLmdldFJlbGF0ZWRFbGVt ZW50cygpLT5z
ZWxlY3QoZSB8IGUgPD4gcGF0dGVybiktPmNvbGxlY3Qob2NsQXNUeXBlKENs YXNzKSk7CgkJ
CXBvc3NpYmlsaXRpZXMtPmZvckVhY2gocG9zc2liaWxpdHkpCgkJCXsKCQkJ CS8vIGNyZWF0
ZSB0aGUgcG9zc2liaWxpdHkKCQkJCXBvc3NpYmlsaXR5LT5tYXAgY3JlYXRl Q29weUluKHNl
bGYpOwoJCQkJCgkJCQkvLyB0aGUgcG9zc2liaWxpdHkgc2hvdWxkIGJlIGNv bmVjdGVkIHRv
IHRoZSBjaG9pY2UKCQkJCXZhciBjb24gOj0gcG9zc2liaWxpdHkuZ2V0UmVs YXRpb25zaGlw
cygpLT5zZWxlY3QoYyB8IGMucmVsYXRlZEVsZW1lbnQtPmluY2x1ZGVzKGNo b2ljZSkpLT5h
bnkodHJ1ZSk7CgkJCQlpZihjb24ub2NsSXNVbmRlZmluZWQoKSkKCQkJCXRo ZW4KCQkJCXsK
CQkJCQkvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuIHNpbmNlIHdlIGdvdCB0 aGUgcG9zc2li
aWxpdHkgYnkgY2FsbGluZyAnZ2V0UmVsYXRlZEVsZW1lbnRzJy4KCQkJCQls b2coIltQYXR0
ZXJuc0xpYiA6OiBFcnJvcl0gRm91bmQgYSBwb3NzaWJpbGl0eSBpbiBhIGNo b2ljZSB3aGlj
aCBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSBjaG9pY2UgaW4gdGhlIHBhdHRl cm4uIik7CgkJ
CQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQkJZW5kaWY7CgkJCQkKCQkJCS8v IGFkZCB0aGUg
Y29ubmVjdGlvbiB0byB0aGUgbW9kZWwKCQkJCWNvbi5vY2xBc1R5cGUoRGVw ZW5kZW5jeSku
bWFwIGNvcHlEZXBlbmRlbmN5SW4oc2VsZik7CgkJCX07CgkJCQoJCX0KCQll bmRpZjsKCX07
CgkKCXJldHVybiB0cnVlOwp9CgovKioKICogQHF1ZXJ5IGdldFBhdHRlcm4K ICogUmV0dXJu
cyB0aGUgcGF0dGVybiBlbGVtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgd2hp Y2ggc2l0cyBp
bgogKiB0aGUgY29udGV4dCBQYWNrYWdlLgogKiBAY29udGV4dCBQYWNrYWdl IHRoZSBwYWNr
YWdlIGluIHdoaWNoIHRvIHNlYXJjaCBmb3IgdGhlIHBhdHRlcm4KICogQHBh cmFtIHBhdHRl
cm4gdGhlIG5hbWUgb2YgdGhlIHBhdHRlcm4gdG8gc2VhcmNoCiAqIEByZXR1 cm4gQ2xhc3Mg
dGhlIHBhdHRlcm4gZWxlbWVudAogKiovCnF1ZXJ5IFBhY2thZ2U6OmdldFBh dHRlcm4ocGF0
dGVybiA6IFN0cmluZykgOiBDbGFzcwp7CglyZXR1cm4gKHNlbGYuZWxlbWVu dHNXaXRoU3Rl
cmVvdHlwZSgicGF0dGVybnM6OlBhdHRlcm4iKS0+Y29sbGVjdChvY2xBc1R5 cGUoQ2xhc3Mp
KSkKCQkJW25hbWUgPSBwYXR0ZXJuXS0+YW55KHRydWUpOwp9CgovKioKICog QHF1ZXJ5IGdl
dFJvbGUKICogUmV0dXJucyB0aGUgcm9sZSBlbGVtZW50IHdpdGggdGhlIGdp dmVuIG5hbWUg
Y29ubmVjdGVkIHRvIHRoZQogKiBjb250ZXh0IHBhdHRlcm4uIE5vIGNoZWNr cyBhcmUgbWFk
ZSBpZiB0aGUgY29udGV4dCBjbGFzcyBpcyAKICogcmVhbGx5IGEgcGF0dGVy biwgdGhpcyBp
cyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlci4KICogQGNvbnRl eHQgQ2xhc3Mg
dGhlIHBhdHRlcm4gdGhhdCBjb250YWlucyB0aGUgcm9sZQogKiBAcGFyYW0g cm9sZU5hbWUg
dGhlIG5hbWUgb2YgdGhlIHJvbGUgdG8gc2VhcmNoIGZvcgogKiBAcmV0dXJu IENsYXNzIHRo
ZSByb2xlIHRoYXQgaXMgZm91bmQsIG9yIG51bGwgaWYgbm9uZSBpcyBmb3Vu ZC4KICoqLwpx
dWVyeSBDbGFzczo6Z2V0Um9sZShyb2xlTmFtZSA6IFN0cmluZykgOiBDbGFz cwp7CgkvLyB3
ZSBnZXQgdGhlIHJlbGF0ZWQgZWxlbWVudHMsIGdldCB0aGUgcm9sZXMgYW5k IHRoZW4gdGhl
IHJvbGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZQoJcmV0dXJuIChzZWxmLmdldFJl bGF0ZWRFbGVt
ZW50cygpLT5jb2xsZWN0KG9jbEFzVHlwZShDbGFzcykpCgkJCQkJLT5zZWxl Y3QoZSB8IG5v
dCBlLmdldEFwcGxpZWRTdGVyZW90eXBlKCJwYXR0ZXJuczo6Um9sZSIpLm9j bElzVW5kZWZp
bmVkKCkpKQoJCQkJCVtuYW1lID0gcm9sZU5hbWVdLT5hbnkodHJ1ZSk7Cn0K Ci8qKgogKiBA
cXVlcnkgZ2V0Um9sZUFzc2lnbm1lbnRzCiAqIFJldHVybnMgdGhlIGVsZW1l bnRzIHRoYXQg
aGF2ZSB0aGUgZ2l2ZW4gcm9sZSBhc3NpZ25lZCBmb3IgdGhlIGdpdmVuIHBh dHRlcm4uCiAq
IElmIHRoZSBwYXR0ZXJuIGlzIG5vdCBmb3VuZCBvciBubyByb2xlIGlzIGNv bm5lY3RlZCB0
byB0aGUgcGF0dGVybiB3aXRoIHRoZSBnaXZlbgogKiByb2xlLW5hbWUsIGFu IGVtcHR5IHNl
dCBpcyByZXR1cm5lZC4KICogQGNvbnRleHQgUGFja2FnZSB0aGUgcGFja2Fn ZSBjb250YWlu
aW5nIHRoZSBwYXR0ZXJuIGVsZW1lbnRzIGFuZCB0aGUgZWxlbWVudHMgdG8g c2VhcmNoCiAq
IEBwYXJhbSBwYXR0ZXJuIG5hbWUgb2YgdGhlIHBhdHRlcm4KICogQHBhcmFt IHJvbGUgbmFt
ZSBvZiB0aGUgcm9sZSB0byBmaW5kIGFzc2lnbm1lbnRzIGZvcgogKiBAcmV0 dXJuIFNldChF
bGVtZW50KSB0aGUgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSByb2xlIGFzc2ln bmVkIGluIHRo
ZSBnaXZlbiBwYXR0ZXJuCiAqKi8KcXVlcnkgUGFja2FnZTo6Z2V0Um9sZUFz c2lnbm1lbnRz
KHBhdHRlcm4gOiBTdHJpbmcsIHJvbGUgOiBTdHJpbmcpIDogU2V0KEVsZW1l bnQpCnsKCS8v
IGluaXRpYWxpc2UgcmV0dXJuIHZhbHVlCgl2YXIgcmV0dXJuVmFsdWUgOiBT ZXQoRWxlbWVu
dCkgOj0gU2V0IHt9OwoJCgkvLyBmaW5kIHRoZSBwYXR0ZXJuCgl2YXIgcGF0 IDo9IChzZWxm
LmVsZW1lbnRzV2l0aFN0ZXJlb3R5cGUoInBhdHRlcm5zOjpQYXR0ZXJuIikt PmNvbGxlY3Qo
b2NsQXNUeXBlKENsYXNzKSkpW25hbWUgPSBwYXR0ZXJuXS0+YW55KHRydWUp OwoJaWYocGF0
Lm9jbElzVW5kZWZpbmVkKCkpCgl0aGVuCgl7CgkJLy8gcGF0dGVybiBub3Qg Zm91bmQKCQls
b2coIltQYXR0ZXJuc0xpYiA6OiBXYXJuaW5nXSBVbmFibGUgdG8gZmluZCBw YXR0ZXJuICci
ICsgcGF0dGVybiArICInIGluIHBhY2thZ2UgJyIgKyBzZWxmLm5hbWUgKyAi Jy4iKTsKCQkv
LyByZXR1cm4gZW1wdHkgc2V0CgkJcmV0dXJuIHJldHVyblZhbHVlOwoJfQoJ ZW5kaWY7CgkK
CS8vIGZpbmQgdGhlIHJvbGUKCXZhciByb2wgOj0gcGF0LmdldFJvbGUocm9s ZSk7CglpZihy
b2wub2NsSXNVbmRlZmluZWQoKSkKCXRoZW4KCXsKCQkvLyByb2xlIG5vdCBm b3VuZAoJCWxv
ZygiW1BhdHRlcm5zTGliIDo6IFdhcm5pbmddIFVuYWJsZSB0byBmaW5kIHJv bGUgJyIgKyBy
b2xlICsgIicgaW4gcGF0dGVybiAnIiArIHBhdHRlcm4gKyAiJy4iKTsKCQkv LyByZXR1cm4g
ZW1wdHkgc2V0CgkJcmV0dXJuIHJldHVyblZhbHVlOwoJfQoJZW5kaWY7CgkK CS8vIGdldCB0
aGUgZWxlbWVudHMgdGhhdCBhcmUgYXNzaWduZWQgdGhlIHJvbGUgKGNvbm5l Y3RlZCB2aWEg
YXNzb2NpYXRpb24pCglyZXR1cm5WYWx1ZSA6PSByb2wuZ2V0UmVsYXRlZEVs ZW1lbnRzKCkt
PnNlbGVjdChlIHwgZSA8PiBwYXQpOwoJcmV0dXJuIHJldHVyblZhbHVlOwp9 CgovKioKICog
QHF1ZXJ5IG93bmluZ1BhY2thZ2UKICogUmV0dXJucyB0aGUgZmlyc3QgcGFj a2FnZSAob3Ig
bW9kZWwpIHRoYXQgY29udGFpbnMgdGhlIGNvbnRleHQgZWxlbWVudC4KICog QGNvbnRleHQg
RWxlbWVudCB0aGUgZWxlbWVudCBmb3Igd2hpY2ggdG8gZmluZCB0aGUgb3du aW5nIHBhY2th
Z2UKICogQHJldHVybiBQYWNrYWdlIHRoZSBmaXJzdCBjb250YWluaW5nIHBh Y2thZ2UgKG9y
IG1vZGVsKQogKiovCnF1ZXJ5IEVsZW1lbnQ6Om93bmluZ1BhY2thZ2UoKSA6 IFBhY2thZ2UK
ewoJdmFyIHJlcyA6PSBzZWxmLm93bmVyOwoJd2hpbGUoKG5vdCByZXMub2Ns SXNVbmRlZmlu
ZWQoKSkgYW5kIChub3QgcmVzLm9jbElzS2luZE9mKFBhY2thZ2UpKSkKCXsK CQlyZXMgOj0g
cmVzLm93bmVyOwoJfTsKCQoJcmV0dXJuIHJlcy5vY2xBc1R5cGUoUGFja2Fn ZSk7Cn0KCi8q
KgogKiBAbWFwcGluZyBhc3NpZ25Sb2xlCiAqIEFzc2lnbnMgdGhlIGdpdmVu IHJvbGUgb2Yg
dGhlIGdpdmVuIHBhdHRlcm4gdG8gdGhlIGNvbnRleHQgZWxlbWVudC4KICog VGhpcyBpcyBk
b25lIGJ5IGNyZWF0aW5nIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoZSBjb250 ZXh0IGVsZW1l
bnQKICogYW5kIHRoZSByb2xlIGVsZW1lbnQuCiAqIEBjb250ZXh0IE5hbWVk RWxlbWVudCB0
aGUgZWxlbWVudCB3aGljaCBuZWVkcyB0byBiZSBhc3NpZ25lZCB0aGUgcm9s ZQogKiBAcGFy
YW0gcGF0dGVybiB0aGUgbmFtZSBvZiB0aGUgcGF0dGVybiB0byB3aGljaCB0 aGUgcm9sZSBi
ZWxvbmdzCiAqIEBwYXJhbSByb2xlIHRoZSBuYW1lIG9mIHRoZSByb2xlIHRv IGFzc2lnbgog
KiBAcmV0dXJuIEJvb2xlYW4gaW5kaWNhdGVzIHN1Y2Nlc3MKICoqLwpoZWxw ZXIgTmFtZWRF
bGVtZW50Ojphc3NpZ25Sb2xlKHBhdHRlcm4gOiBTdHJpbmcsIHJvbGUgOiBT dHJpbmcpIDog
Qm9vbGVhbgp7Cgl2YXIgcGF0IDo9IHNlbGYuZ2V0TW9kZWwoKS5nZXRQYXR0 ZXJuKHBhdHRl
cm4pOwoJaWYocGF0Lm9jbElzVW5kZWZpbmVkKCkpCgl0aGVuCgl7CgkJbG9n KCJbUGF0dGVy
bnNMaWIgOjogV2FybmluZ10gVW5hYmxlIHRvIGFzc2lnbiByb2xlLCBwYXR0 ZXJuICciICsg
cGF0dGVybiArCgkJIAkiJyBub3QgZm91bmQgaW4gbW9kZWwgJyIgKyBzZWxm LmdldE1vZGVs
KCkubmFtZSArICInLiIpOwoJCXJldHVybiBmYWxzZTsKCX0KCWVuZGlmOwoJ Cgl2YXIgcm9s
IDo9IHBhdC5nZXRSb2xlKHJvbGUpOwoJaWYocm9sLm9jbElzVW5kZWZpbmVk KCkpCgl0aGVu
Cgl7CgkJbG9nKCJbUGF0dGVybnNMaWIgOjogV2FybmluZ10gVW5hYmxlIHRv IGFzc2lnbiBy
b2xlLCByb2xlICciICsgcm9sZSArIAoJCQkiJyBub3QgZm91bmQgaW4gcGF0 dGVybiAnIiAr
IHBhdHRlcm4gKyAiJy4iKTsKCQlyZXR1cm4gZmFsc2U7Cgl9CgllbmRpZjsK CQoJcm9sLmNy
ZWF0ZURlcGVuZGVuY3koc2VsZik7CgkKCXJldHVybiB0cnVlOwp9CgovKioK ICogQHF1ZXJ5
IHVuaXF1ZU5hbWUKICogUmV0dXJucyBhIG5hbWUgd2hpY2ggaXMgdW5pcXVl IGZvciBhbGwg
b3duZWQgZWxlbWVudHMgb2YgdGhlIGNvbnRleHQKICogZWxlbWVudC4gSXQg c3RhcnRzIHdp
dGggdGhlIGdpdmVuIGJhc2UgbmFtZSBhbmQgYWRkcyBudW1iZXJzIHRvIGl0 CiAqIHVudGls
IGl0IGlzIHVuaXF1ZS4KICogQGNvbnRleHQgTmFtZWRFbGVtZW50IHRoZSBv d25pbmcgZWxl
bWVudCBpbiB3aGljaCBhIHVuaXF1ZSBuYW1lIGlzIG5lZWRlZC4KICogQHBh cmFtIGJhc2Ug
dGhlIGJhc2UgZm9yIHRoZSBuYW1lCiAqIEByZXR1cm4gU3RyaW5nIGEgbmFt ZSB0aGF0IGlz
IHVuaXF1ZSBvdmVyIGFsbCBlbGVtZW50cyBvd25lZCBieSB0aGUgY29udGV4 dCBlbGVtZW50
LgogKiovCnF1ZXJ5IE5hbWVkRWxlbWVudDo6dW5pcXVlTmFtZShiYXNlIDog U3RyaW5nKSA6
IFN0cmluZwp7Cgl2YXIgcmVzIDo9IGJhc2U7Cgl2YXIgY291bnQgOj0gMTsK CQoJdmFyIG5h
bWVzIDo9IHNlbGYub3duZWRFbGVtZW50LT5jb2xsZWN0KG9jbEFzVHlwZShO YW1lZEVsZW1l
bnQpLm5hbWUpOwoJd2hpbGUobmFtZXMtPmluY2x1ZGVzKHJlcykpCgl7CgkJ cmVzIDo9IGJh
c2UgKyBjb3VudC5vY2xBc1R5cGUoU3RyaW5nKTsKCX07CgkKCXJldHVybiBy ZXM7Cn0KCnF1
ZXJ5IE5hbWVkRWxlbWVudDo6aXNEZXBlbmRlbnRPZihzdXBwbGllciA6IE5h bWVkRWxlbWVu
dCkgOiBEZXBlbmRlbmN5CnsKCXZhciByZWxzIDo9IHNlbGYuZ2V0UmVsYXRp b25zaGlwcygp
W0RlcGVuZGVuY3ldCgkJCQkJLT5zZWxlY3QoZSB8IGUuY2xpZW50LT5pbmNs dWRlcyhzZWxm
KSkKCQkJCQktPmNvbGxlY3Qob2NsQXNUeXBlKERlcGVuZGVuY3kpKTsKCQoJ cmVscy0+Zm9y
RWFjaChkZXApCgl7CgkJaWYoZGVwLnN1cHBsaWVyLT5pbmNsdWRlcyhzdXBw bGllcikpCgkJ
dGhlbgoJCXsKCQkJcmV0dXJuIGRlcDsKCQl9CgkJZW5kaWY7Cgl9OwoJCgly ZXR1cm4gbnVs
bDsKfQoKLyoqCiAqIEBtYXBwaW5nIGluaXRpYWxpc2VEZXBlbmRlbmN5CiAq IENoZWNrcyBp
ZiBhIGRlcGVuZGVuY3kgZXhpc3QgYmV0d2VlbiB0aGUgY29udGV4dCBlbGVt ZW50IGFuZCB0
aGUgb25lIGdpdmVuCiAqIGFzIGEgcGFyYW1ldGVyLiBJZiBub3QsIGEgZGVw ZW5kZW5jeSBi
ZXR3ZWVuIHRoZW0gaXMgY3JlYXRlZCB3aXRoIHRoZSBnaXZlbgogKiBuYW1l LgogKiovCm1h
cHBpbmcgTmFtZWRFbGVtZW50Ojppbml0aWFsaXNlRGVwZW5kZW5jeShzdXBw bGllciA6IE5h
bWVkRWxlbWVudCwgbmFtZSA6IFN0cmluZykgOiBEZXBlbmRlbmN5CnsKCWlu aXQKCXsKCQl2
YXIgZGVwIDo9IHNlbGYuaXNEZXBlbmRlbnRPZihzdXBwbGllcik7CgkJaWYo ZGVwLm9jbElz
VW5kZWZpbmVkKCkpCgkJdGhlbgoJCXsKCQkJcmVzdWx0IDo9IHNlbGYuY3Jl YXRlRGVwZW5k
ZW5jeShzdXBwbGllcik7CgkJCXJlc3VsdC5uYW1lIDo9IG5hbWU7CgkJfQoJ CWVsc2UKCQl7
CgkJCXJlc3VsdCA6PSBkZXA7CgkJCXJlc3VsdC5uYW1lIDo9IHJlc3VsdC5u YW1lICsgIiAv
ICIgKyBuYW1lOwoJCX0KCQllbmRpZjsKCX0KfQoKcXVlcnkgQXNzb2NpYXRp b246OmlzQ29t
cG9zaXRpb24oKSA6IEJvb2xlYW4KewoJdmFyIHByb3BlcnRpZXMgOj0gc2Vs Zi5tZW1iZXJF
bmQtPnNlbGVjdChwIHwgcC5hZ2dyZWdhdGlvbiA9IEFnZ3JlZ2F0aW9uS2lu ZDo6Y29tcG9z
aXRlKTsKCWlmKHByb3BlcnRpZXMgLT5pc0VtcHR5KCkpCgl0aGVuCgl7CgkJ cmV0dXJuIGZh
bHNlOwoJfQoJZW5kaWY7CgkKCXJldHVybiB0cnVlOwp9CgovKioKICogQG1h cHBpbmcgaW5p
dGlhbGlzZUNvbXBvc2l0aW9uCiAqIENoZWNrcyBpZiB0aGUgcGFyYW1ldGVy IGVsZW1lbnQg
aXMgYSBjb21wb3NpdGlvbiBvZiB0aGUgY29udGV4dCBlbGVtZW50LgogKiBJ ZiBpdCBpcywg
dGhlIHJlc3VsdCBpcyB0aGF0IGNvbXBvc2l0aW9uIChBc3NvY2lhdGlvbiks IGVsc2UgYSBu
ZXcgCiAqIGNvbXBvc2l0aW9uIGlzIGNyZWF0ZWQuCiAqKi8KbWFwcGluZyBD bGFzczo6aW5p
dGlhbGlzZUNvbXBvc2l0aW9uKGNvbXAgOiBDbGFzcywgY29tcE5hbWUgOiBT dHJpbmcpIDog
QXNzb2NpYXRpb24KewoJaW5pdAoJewoJCS8vIGdldCBhbGwgYXNzb2NpYXRp b25zCgkJdmFy
IGFzcyA6PSBzZWxmLmdldFJlbGF0aW9uc2hpcHMoKQoJCQkJCQktPnNlbGVj dChyIHwgci5v
Y2xJc1R5cGVPZihBc3NvY2lhdGlvbikpLT5jb2xsZWN0KG9jbEFzVHlwZShB c3NvY2lhdGlv
bikpCgkJCQkJCS0+c2VsZWN0KGEgfCBhLnJlbGF0ZWRFbGVtZW50LT5pbmNs dWRlcyhjb21w
KSk7CgkJLy8gZ2V0IGFsbCBjb21wb3NpdGlvbnMKCQl2YXIgY29tcHMgOj0g YXNzLT5zZWxl
Y3QoYyB8IGMuaXNDb21wb3NpdGlvbigpKTsKCQkKCQkvLyBjaGVjayBpZiBh IGNvbXBvc2l0
aW9uIGV4aXh0cwoJCWlmKGNvbXBzLT5pc0VtcHR5KCkpCgkJdGhlbgoJCXsK CQkJLy8gbm8g
Y29tcG9zaXRpb24gZXhpc3RzLCBtdXN0IGNyZWF0ZSBhIG5ldyBvbmUKCQkJ b2JqZWN0IHJl
c3VsdCA6IEFzc29jaWF0aW9uCgkJCXsKCQkJCW5hbWUgOj0gY29tcE5hbWU7 CgkJCQltZW1i
ZXJFbmQgOj0gTGlzdCB7CgkJCQkJb2JqZWN0IFByb3BlcnR5ewoJCQkJCQl0 eXBlIDo9IHNl
bGYub2NsQXNUeXBlKFR5cGUpOwoJCQkJCX0sIAoJCQkJCW9iamVjdCBQcm9w ZXJ0eXsKCQkJ
CQkJdHlwZSA6PSBjb21wLm9jbEFzVHlwZShUeXBlKTsKCQkJCQkJYWdncmVn YXRpb24gOj0g
QWdncmVnYXRpb25LaW5kOjpjb21wb3NpdGU7CgkJCQkJfQoJCQkJfQoJCQl9 OwoJCX0KCQll
bHNlCgkJewoJCQkvLyByZXN1bHQgaXMgdGhlIGFscmVhZHkgZXhpc3Rpbmcg Y29tcG9zaXRp
b24KCQkJcmVzdWx0IDo9IGNvbXBzLT5hbnkodHJ1ZSk7CgkJfQoJCWVuZGlm OwoJfQoJCgkv
LyBhZGQgdGhlIG5ldyBjb21wb3NpdGlvbiB0byB0aGUgcGFja2FnZSBvZiB0 aGUgY29udGV4
dCBjbGFzcwoJc2VsZi5fcGFja2FnZS5wYWNrYWdlZEVsZW1lbnQgKz0gcmVz dWx0Owp9Cgov
KioKICogQHF1ZXJ5IGdldENob2ljZQogKiBSZXR1cm5zIHRoZSBjaG9pY2Ug KG5hbWUgb2Yg
dGhlIGNsYXNzIHJlcHJlc2VudGluZyB0aGUgY2hvaWNlKSBtYWRlIGJ5IHRo ZQogKiB1c2Vy
LiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY2hvaWNlcyBzdGlsbCBhdmFpbGFi bGUsIHRoZSB3
b3JkICd1bmRlZmluZWQnIGlzCiAqIHJldHVybmVkLCBpZiBubyBjaG9pY2Ug aXMgYXZhaWxh
YmxlLCB0aGUgd29yZCAnbnVsbCcgaXMgcmV0dXJuZWQuCiAqIEBjb250ZXh0 IENsYXNzIHRo
ZSBwYXR0ZXJuIGZvciB3aGljaCB0byBmaW5kIGEgY2hvaWNlCiAqIEBwYXJh bSBjaG9pY2Ug
dGhlIG5hbWUgb2YgdGhlIGNob2ljZSB0byBjaGVjawogKiBAcmV0dXJuIFN0 cmluZyB0aGUg
bmFtZSBvZiB0aGUgY2hvaWNlIGNsYXNzIHRoYXQgaXMgYXZhaWxhYmxlLCBv ciAndW5kZWZp
bmVkJyBvciAnbnVsbCcuCiAqKi8KcXVlcnkgQ2xhc3M6OmdldENob2ljZShj aG9pY2UgOiBT
dHJpbmcpIDogU3RyaW5nCnsKCXZhciBjaCA6PSAoc2VsZi5nZXRSZWxhdGVk RWxlbWVudHMo
KQoJCQkJCQktPnNlbGVjdChlIHwgbm90IGUuZ2V0QXBwbGllZFN0ZXJlb3R5 cGUoInBhdHRl
cm5zOjpDaG9pY2UiKS5vY2xJc1VuZGVmaW5lZCgpKQoJCQkJCQktPmNvbGxl Y3Qob2NsQXNU
eXBlKENsYXNzKSkpW25hbWUgPSBjaG9pY2VdLT5hbnkodHJ1ZSk7CglpZihj aC5vY2xJc1Vu
ZGVmaW5lZCgpKQoJdGhlbgoJewoJCXJldHVybiAibnVsbCI7Cgl9CgllbmRp ZjsKCQoJdmFy
IHBvc3NpYmlsaXRpZXMgOj0gY2guZ2V0UmVsYXRlZEVsZW1lbnRzKCkKCQkJ CQkJCS0+c2Vs
ZWN0KCBlIHwgZSA8PiBzZWxmKQoJCQkJCQkJLT5jb2xsZWN0KG9jbEFzVHlw ZShDbGFzcykp
OwoJaWYocG9zc2liaWxpdGllcy0+c2l6ZSgpIDwgMSkKCXRoZW4KCXsKCQly ZXR1cm4gIm51
bGwiOwoJfQoJZW5kaWY7CgkKCWlmKHBvc3NpYmlsaXRpZXMtPnNpemUoKSA+ IDEpCgl0aGVu
Cgl7CgkJcmV0dXJuICJ1bmRlZmluZWQiOwoJfQoJZW5kaWY7CgkKCXJldHVy biBwb3NzaWJp
bGl0aWVzLT5hbnkodHJ1ZSkubmFtZTsKfSAKCi8qKgogKiBAbWFwcGluZyBp bml0aWFsaXNl
Um9sZUFzQ2xhc3MKICogQ2hlY2tzIGlmIGEgY2VydGFpbiByb2xlIGlzIGFs cmVhZHkgYXNz
aWduZWQgdG8gYSBjbGFzcy4KICogSWYgaXQgaXMsIHRoZSByZXN1bHQgb2Yg dGhlIG1hcHBp
bmcgaXMgdGhlIGFzc2lnbmVkIGNsYXNzLgogKiBpZiBub3QsIGEgbmV3IGNs YXNzIGlzIGNy
ZWF0ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcm9sZSwKICogYW5kIGlzIGFz c2lnbmVkIHRo
ZSByb2xlLgogKiBAY29udGV4dCBQYWNrYWdlIHRoZSBwYWNrYWdlIHdoaWNo IHNob3VsZCBj
b250YWluIHRoZSBjbGFzcyBpZiB0aGUgY2xhc3MgZG9lcyBub3QgZXhpc3Qg eWV0LgogKiBA
cGFyYW0gcGF0dGVybk5hbWUgdGhlIG5hbWUgb2YgdGhlIHBhdHRlcm4gdGhh dCBjb250YWlu
cyB0aGUgcm9sZS4KICogQHBhcmFtIHJvbGVOYW1lIHRoZSBuYW1lIG9mIHRo ZSByb2xlIHRv
IGluaXRpYWxpc2UuCiAqIEByZXR1cm4gQ2xhc3MgdGhlIGNsYXNzIHRoYXQg aGFzIHRoZSBy
b2xlIGFzc2lnbmVkIChuZXcgb3IgYWxyZWFkeSBleGlzdGluZykuIAogKi8K bWFwcGluZyBp
bm91dCBQYWNrYWdlOjppbml0aWFsaXNlUm9sZUFzQ2xhc3MocGF0dGVybk5h bWUgOiBTdHJp
bmcsIHJvbGVOYW1lIDogU3RyaW5nKSA6IENsYXNzCnsKCWluaXQKCXsKCQkv LyBnZXQgdGhl
IGNsYXNzIHRoYXQgaGFzIHRoZSByb2xlIGFzc2lnbmVkCgkJdmFyIGMgOj0g c2VsZi5nZXRN
b2RlbCgpCgkJCQkJIC5nZXRSb2xlQXNzaWdubWVudHMocGF0dGVybk5hbWUs IHJvbGVOYW1l
KQoJCQkJCSAtPnNlbGVjdChlIHwgZS5vY2xJc1R5cGVPZihDbGFzcykpLT5h bnkodHJ1ZSku
b2NsQXNUeXBlKENsYXNzKTsKCQkvLyBjaGVjayBpZiBzdWNoIGEgY2xhc3Mg ZXhpc3RzCgkJ
aWYobm90IGMub2NsSXNVbmRlZmluZWQoKSkKCQl0aGVuCgkJewoJCQkvLyB0 aGUgY2xhc3Mg
ZXhpc3RzLCByZXN1bHQgaXMgdGhlIGNsYXNzIHdpdGggdGhlIHJvbGUgYXNz aWduZWQKCQkJ
cmVzdWx0IDo9IGM7CgkJfQoJCWVsc2UKCQl7CgkJCS8vIG5vIGNsYXNzIGhh cyB0aGUgcm9s
ZSBhc3NpZ25lZCB5ZXQsIGNyZWF0ZSBhIG5ldyBjbGFzcwoJCQlvYmplY3Qg cmVzdWx0IDog
Q2xhc3MKCQkJewoJCQkJbmFtZSA6PSBzZWxmLnVuaXF1ZU5hbWUocm9sZU5h bWUpOwoJCQl9
CgkJfQoJCWVuZGlmOwoJfQoJCgkvLyBjaGVjayBpZiB0aGUgY2xhc3MgaXMg anVzdCBjcmVh
dGVkCglpZihjLm9jbElzVW5kZWZpbmVkKCkpCgl0aGVuCgl7CgkJLy8gVGhl IGNsYXNzIHNo
b3VsZCBiZSBpbiB0aGUgY29udGV4dCBwYWNrYWdlCgkJc2VsZi5wYWNrYWdl ZEVsZW1lbnQg
Kz0gcmVzdWx0OwoJCS8vIFRoZSBjbGFzcyBnZXRzIHRoZSByb2xlIGFzc2ln bmVkCgkJcmVz
dWx0LmFzc2lnblJvbGUocGF0dGVybk5hbWUsIHJvbGVOYW1lKTsKCX0KCWVu ZGlmOwp9Cgov
KioKICogQG1hcHBpbmcgaW5pdGlhbGlzZVJvbGVBc1BhY2thZ2UKICogQ2hl Y2tzIGlmIGEg
Y2VydGFpbiByb2xlIGlzIGFscmVhZHkgYXNzaWduZWQgdG8gYSBwYWNrYWdl LgogKiBJZiBp
dCBpcywgdGhlIHJlc3VsdCBvZiB0aGUgbWFwcGluZyBpcyB0aGUgYXNzaWdu ZWQgcGFja2Fn
ZS4KICogaWYgbm90LCBhIG5ldyBwYWNrYWdlIGlzIGNyZWF0ZWQgd2l0aCB0 aGUgbmFtZSBv
ZiB0aGUgcm9sZSwKICogYW5kIGlzIGFzc2lnbmVkIHRoZSByb2xlLgogKiBA Y29udGV4dCBQ
YWNrYWdlIHRoZSBwYWNrYWdlIHdoaWNoIHNob3VsZCBjb250YWluIHRoZSBw YWNrYWdlIGlm
IHRoZSBwYWNrYWdlIGRvZXMgbm90IGV4aXN0IHlldC4KICogQHBhcmFtIHBh dHRlcm5OYW1l
IHRoZSBuYW1lIG9mIHRoZSBwYXR0ZXJuIHRoYXQgY29udGFpbnMgdGhlIHJv bGUuCiAqIEBw
YXJhbSByb2xlTmFtZSB0aGUgbmFtZSBvZiB0aGUgcm9sZSB0byBpbml0aWFs aXNlLgogKiBA
cmV0dXJuIFBhY2thZ2UgdGhlIHBhY2thZ2UgdGhhdCBoYXMgdGhlIHJvbGUg YXNzaWduZWQg
KG5ldyBvciBhbHJlYWR5IGV4aXN0aW5nKS4gCiAqLwptYXBwaW5nIGlub3V0 IFBhY2thZ2U6
OmluaXRpYWxpc2VSb2xlQXNQYWNrYWdlKHBhdHRlcm5OYW1lIDogU3RyaW5n LCByb2xlTmFt
ZSA6IFN0cmluZykgOiBQYWNrYWdlCnsKCWluaXQKCXsKCQkvLyBnZXQgdGhl IHBhY2thZ2Ug
dGhhdCBoYXMgdGhlIHJvbGUgYXNzaWduZWQKCQl2YXIgYyA6PSBzZWxmLmdl dE1vZGVsKCkK
CQkJCQkgLmdldFJvbGVBc3NpZ25tZW50cyhwYXR0ZXJuTmFtZSwgcm9sZU5h bWUpCgkJCQkJ
IC0+c2VsZWN0KGUgfCBlLm9jbElzVHlwZU9mKFBhY2thZ2UpKS0+YW55KHRy dWUpLm9jbEFz
VHlwZShQYWNrYWdlKTsKCQkvLyBjaGVjayBpZiBzdWNoIGEgcGFja2FnZSBl eGlzdHMKCQlp
Zihub3QgYy5vY2xJc1VuZGVmaW5lZCgpKQoJCXRoZW4KCQl7CgkJCS8vIHRo ZSBwYWNrYWdl
IGV4aXN0cywgcmVzdWx0IGlzIHRoZSBwYWNrYWdlIHdpdGggdGhlIHJvbGUg YXNzaWduZWQK
CQkJcmVzdWx0IDo9IGM7CgkJfQoJCWVsc2UKCQl7CgkJCS8vIG5vIHBhY2th Z2UgaGFzIHRo
ZSByb2xlIGFzc2lnbmVkIHlldCwgY3JlYXRlIGEgbmV3IHBhY2thZ2UKCQkJ b2JqZWN0IHJl
c3VsdCA6IFBhY2thZ2UKCQkJewoJCQkJbmFtZSA6PSBzZWxmLnVuaXF1ZU5h bWUocm9sZU5h
bWUpOwoJCQl9CgkJfQoJCWVuZGlmOwoJfQoJCgkvLyBjaGVjayBpZiB0aGUg cGFja2FnZSBp
cyBqdXN0IGNyZWF0ZWQKCWlmKGMub2NsSXNVbmRlZmluZWQoKSkKCXRoZW4K CXsKCQkvLyBU
aGUgcGFja2FnZSBzaG91bGQgYmUgaW4gdGhlIGNvbnRleHQgcGFja2FnZQoJ CXNlbGYucGFj
a2FnZWRFbGVtZW50ICs9IHJlc3VsdDsKCQkvLyBUaGUgcGFja2FnZSBnZXRz IHRoZSByb2xl
IGFzc2lnbmVkCgkJcmVzdWx0LmFzc2lnblJvbGUocGF0dGVybk5hbWUsIHJv bGVOYW1lKTsK
CX0KCWVuZGlmOwp9
--------------080306010006050601060002--
|
|
| |
Re: [QVTO] runtimeexception : VarParameterImpl cannot be cast to MappingParameter [message #495155 is a reply to message #495084] |
Tue, 03 November 2009 22:26 |
Eclipse User |
|
|
|
Originally posted by: dvorak.radek.gmail.com
Just a hint to workaround this issue until it gets fixed.
Note, only helpers returning <null> value in one of its result parameters
are affected by this issue.
Mapping operations are not affected.
Workaround:
Use explicit tuple return type instead of multiple result parameters.
The caller will not be affected at all as multiple parameters get
implicitly converted
to a corresponding tuple type.
helper Model::initialiseRoles(choice : String) :
Tuple(
pack : Package,
userCred : Class,
enforcer : Class,
subject : Class,
store : Class,
provider : Class,
loginContext : Class,
callBackH : Class)
{
// use tuple literal to construct the result
return Tuple { pack = ..., userCred = ..., ... }
}
Regards,
/Radek
On Tue, 03 Nov 2009 18:37:41 +0100, Tony Van Beers <vanbeerst@gmail.com>
wrote:
> Hi,
>
> I get following runtime exception when running my QVTO transformation :
> org.eclipse.m2m.internal.qvt.oml.evaluator.QvtRuntimeExcepti on:
> org.eclipse.m2m.internal.qvt.oml.expressions.impl.VarParamet erImpl
> cannot be cast to
> org.eclipse.m2m.internal.qvt.oml.expressions.MappingParamete r
> at
> AuthenticationEnforcerPattern::Model::initialiseRoles(authen ticationenforcer.qvto:204)
> at AuthenticationEnforcerPattern::main(authenticationenforcer.q vto:91)
>
> What does this message mean?
>
> This is the code where I invoke the helper :
> var roles := modelRoot.initialiseRoles(choice);
>
> This is the signature of the helper itself :
> helper Model::initialiseRoles(choice : String) :
> pack : Package,
> userCred : Class,
> enforcer : Class,
> subject : Class,
> store : Class,
> provider : Class,
> loginContext : Class,
> callBackH : Class
> {
> // body of helper
> }
>
> Regards,
> Tony.
|
|
|
Re: [QVTO] runtimeexception : VarParameterImpl cannot be cast to MappingParameter [message #495174 is a reply to message #495155] |
Wed, 04 November 2009 01:02 |
Eclipse User |
|
|
|
Originally posted by: vanbeerst.gmail.com
Thanks for that work around. I actually tried that, but I couldn't get
the tuple initialized correctly, I was trying :
- return Tuple { pack := ... }
- return Tuple { pack : ... }
It is kind of strange that for this kind of initialisation the '='
operator is used, which is used for comparison anywhere else...
Is there a place to find documentation about these kind of things,
because in the very beginning, I remember, I also had quite some
difficulty getting a List initialised corectly.
regards,
Tony.
On 11/03/2009 11:26 PM, radek dvorak wrote:
> Just a hint to workaround this issue until it gets fixed.
> Note, only helpers returning <null> value in one of its result
> parameters are affected by this issue.
> Mapping operations are not affected.
>
> Workaround:
> Use explicit tuple return type instead of multiple result parameters.
> The caller will not be affected at all as multiple parameters get
> implicitly converted
> to a corresponding tuple type.
>
>
> helper Model::initialiseRoles(choice : String) :
> Tuple(
> pack : Package,
> userCred : Class,
> enforcer : Class,
> subject : Class,
> store : Class,
> provider : Class,
> loginContext : Class,
> callBackH : Class)
> {
> // use tuple literal to construct the result
> return Tuple { pack = ..., userCred = ..., ... }
> }
>
> Regards,
> /Radek
>
>
>
>
> On Tue, 03 Nov 2009 18:37:41 +0100, Tony Van Beers <vanbeerst@gmail.com>
> wrote:
>
>> Hi,
>>
>> I get following runtime exception when running my QVTO transformation :
>> org.eclipse.m2m.internal.qvt.oml.evaluator.QvtRuntimeExcepti on:
>> org.eclipse.m2m.internal.qvt.oml.expressions.impl.VarParamet erImpl
>> cannot be cast to
>> org.eclipse.m2m.internal.qvt.oml.expressions.MappingParamete r
>> at
>> AuthenticationEnforcerPattern::Model::initialiseRoles(authen ticationenforcer.qvto:204)
>>
>> at AuthenticationEnforcerPattern::main(authenticationenforcer.q vto:91)
>>
>> What does this message mean?
>>
>> This is the code where I invoke the helper :
>> var roles := modelRoot.initialiseRoles(choice);
>>
>> This is the signature of the helper itself :
>> helper Model::initialiseRoles(choice : String) :
>> pack : Package,
>> userCred : Class,
>> enforcer : Class,
>> subject : Class,
>> store : Class,
>> provider : Class,
>> loginContext : Class,
>> callBackH : Class
>> {
>> // body of helper
>> }
>>
>> Regards,
>> Tony.
|
|
|
Re: [QVTO] runtimeexception : VarParameterImpl cannot be cast to MappingParameter [message #495247 is a reply to message #495174] |
Wed, 04 November 2009 10:43 |
Eclipse User |
|
|
|
Originally posted by: dvorak.radek.gmail.com
Hi Tony,
Comments in-lined below:
> Thanks for that work around. I actually tried that, but I couldn't get
> the tuple initialized correctly, I was trying :
> - return Tuple { pack := ... }
> - return Tuple { pack : ... }
> It is kind of strange that for this kind of initialisation the '='
> operator is used, which is used for comparison anywhere else...
> Is there a place to find documentation about these kind of things,
> because in the very beginning, I remember, I also had quite some
> difficulty getting a List initialised corectly.
It's an OCL thing, QVTO extends OCL. OCL as such is a side effect free
language,
there is no concept of modifying assignments. Perhaps, it's so just to
emphasize
the fact the given tuple part's initial value is equal to the left side
expression ;).
What was wrong with the List?
Regards,
/Radek
>
> regards,
> Tony.
>
> On 11/03/2009 11:26 PM, radek dvorak wrote:
>> Just a hint to workaround this issue until it gets fixed.
>> Note, only helpers returning <null> value in one of its result
>> parameters are affected by this issue.
>> Mapping operations are not affected.
>>
>> Workaround:
>> Use explicit tuple return type instead of multiple result parameters.
>> The caller will not be affected at all as multiple parameters get
>> implicitly converted
>> to a corresponding tuple type.
>>
>>
>> helper Model::initialiseRoles(choice : String) :
>> Tuple(
>> pack : Package,
>> userCred : Class,
>> enforcer : Class,
>> subject : Class,
>> store : Class,
>> provider : Class,
>> loginContext : Class,
>> callBackH : Class)
>> {
>> // use tuple literal to construct the result
>> return Tuple { pack = ..., userCred = ..., ... }
>> }
>>
>> Regards,
>> /Radek
>>
>>
>>
>>
>> On Tue, 03 Nov 2009 18:37:41 +0100, Tony Van Beers <vanbeerst@gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> I get following runtime exception when running my QVTO transformation :
>>> org.eclipse.m2m.internal.qvt.oml.evaluator.QvtRuntimeExcepti on:
>>> org.eclipse.m2m.internal.qvt.oml.expressions.impl.VarParamet erImpl
>>> cannot be cast to
>>> org.eclipse.m2m.internal.qvt.oml.expressions.MappingParamete r
>>> at
>>> AuthenticationEnforcerPattern::Model::initialiseRoles(authen ticationenforcer.qvto:204)
>>>
>>> at AuthenticationEnforcerPattern::main(authenticationenforcer.q vto:91)
>>>
>>> What does this message mean?
>>>
>>> This is the code where I invoke the helper :
>>> var roles := modelRoot.initialiseRoles(choice);
>>>
>>> This is the signature of the helper itself :
>>> helper Model::initialiseRoles(choice : String) :
>>> pack : Package,
>>> userCred : Class,
>>> enforcer : Class,
>>> subject : Class,
>>> store : Class,
>>> provider : Class,
>>> loginContext : Class,
>>> callBackH : Class
>>> {
>>> // body of helper
>>> }
>>>
>>> Regards,
>>> Tony.
>
|
|
|
Goto Forum:
Current Time: Wed Feb 05 06:51:45 GMT 2025
Powered by FUDForum. Page generated in 0.03810 seconds
|