60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516152e86100fd6000396000818161327b015281816132a401526134c001526152e86000f3fe6080604052600436106103f95760003560e01c80638da5cb5b1161020d578063c87b56dd11610128578063dfabc033116100bb578063f2fde38b1161008a578063f5fe2ac51161006f578063f5fe2ac514610cf9578063f780bc1a14610d26578063fd4fe8a814610d4657600080fd5b8063f2fde38b14610cb9578063f31af75114610cd957600080fd5b8063dfabc03314610c15578063e7cc724414610c35578063e985e9c514610c5e578063edac985b14610c9957600080fd5b8063d75eeb84116100f7578063d75eeb8414610b7d578063d96ca0b914610b9d578063dd62ed3e14610bbd578063dd63769914610bf557600080fd5b8063c87b56dd14610b15578063d1d4a1bc14610b35578063d505accf14610b3d578063d72bdc5314610b5d57600080fd5b8063b287c8ed116101a0578063bc912e1a1161016f578063bc912e1a14610aaf578063c5ab3ba614610aca578063c6bba99014610adf578063c6e672b914610af557600080fd5b8063b287c8ed14610a23578063b3f9ea3414610a36578063b88d4fde14610a79578063b9d2217b14610a9957600080fd5b8063a22cb465116101dc578063a22cb4651461096d578063a9059cbb1461098d578063ad3cb1cc146109ad578063b1ab9317146109f657600080fd5b80638da5cb5b146108c857806395d89b4114610912578063976a8435146109275780639b19251a1461093d57600080fd5b806342842e0e116103185780636ad97dcf116102ab578063715018a61161027a5780637ecebe001161025f5780637ecebe0014610870578063827cab951461089d57806389fb4c66146108b357600080fd5b8063715018a61461082b57806378a923801461084057600080fd5b80636ad97dcf146107665780636e8f624b146107ac57806370319970146107d157806370a08231146107fe57600080fd5b80634f1ef286116102e75780634f1ef286146106fe57806352d1902d146107115780636352211e146107265780636a20de921461074657600080fd5b806342842e0e146106885780634782f779146106a85780634d966072146106c85780634f02c420146106e857600080fd5b806315f221871161039057806332377cd21161035f57806332377cd2146106255780633644e5151461063b57806339efc8c4146106505780633f06b8ab1461066657600080fd5b806315f22187146105ae57806318160ddd146105c357806323b872dd146105d9578063313ce567146105f957600080fd5b8063081812fc116103cc578063081812fc146104c1578063095ea7b31461052957806309674eb01461054957806309f0ef651461058e57600080fd5b806301ffc9a7146103fe57806302519da31461043357806306fdde031461048457806307e89ec0146104a6575b600080fd5b34801561040a57600080fd5b5061041e6104193660046146f8565b610d66565b60405190151581526020015b60405180910390f35b34801561043f57600080fd5b5061047661044e366004614739565b73ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205490565b60405190815260200161042a565b34801561049057600080fd5b50610499610e97565b60405161042a91906147c2565b3480156104b257600080fd5b50610476668e1bc9bf04000081565b3480156104cd57600080fd5b506105046104dc3660046147d5565b600c6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161042a565b34801561053557600080fd5b5061041e6105443660046147ee565b610f25565b34801561055557600080fd5b506000546fffffffffffffffffffffffffffffffff80821670010000000000000000000000000000000090920481169190910316610476565b34801561059a57600080fd5b5061041e6105a9366004614739565b610f63565b3480156105ba57600080fd5b50610476600a81565b3480156105cf57600080fd5b5061047660065481565b3480156105e557600080fd5b5061041e6105f4366004614818565b610faf565b34801561060557600080fd5b506004546106139060ff1681565b60405160ff909116815260200161042a565b34801561063157600080fd5b50610476610bb881565b34801561064757600080fd5b50610476610fec565b34801561065c57600080fd5b5061047660145481565b34801561067257600080fd5b50610686610681366004614869565b611006565b005b34801561069457600080fd5b506106866106a3366004614818565b6110e3565b3480156106b457600080fd5b506106866106c33660046147ee565b611103565b3480156106d457600080fd5b5061041e6106e33660046147ee565b61130d565b3480156106f457600080fd5b5061047660075481565b61068661070c3660046149b9565b6113cd565b34801561071d57600080fd5b506104766113ec565b34801561073257600080fd5b506105046107413660046147d5565b61141b565b34801561075257600080fd5b506106866107613660046147ee565b6114d1565b34801561077257600080fd5b5060165461078f9063ffffffff8082169164010000000090041682565b6040805163ffffffff93841681529290911660208301520161042a565b3480156107b857600080fd5b5061047670010000000000000000000000000000000081565b3480156107dd57600080fd5b50601a546105049073ffffffffffffffffffffffffffffffffffffffff1681565b34801561080a57600080fd5b50610476610819366004614739565b600a6020526000908152604090205481565b34801561083757600080fd5b50610686611648565b34801561084c57600080fd5b5061041e61085b366004614739565b60186020526000908152604090205460ff1681565b34801561087c57600080fd5b5061047661088b366004614739565b60116020526000908152604090205481565b3480156108a957600080fd5b5061047660125481565b3480156108bf57600080fd5b50600654610476565b3480156108d457600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff16610504565b34801561091e57600080fd5b5061049961165c565b34801561093357600080fd5b5061047660055481565b34801561094957600080fd5b5061041e610958366004614739565b60176020526000908152604090205460ff1681565b34801561097957600080fd5b50610686610988366004614a07565b611669565b34801561099957600080fd5b5061041e6109a83660046147ee565b61174d565b3480156109b957600080fd5b506104996040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b348015610a0257600080fd5b50610a16610a11366004614739565b6117a7565b60405161042a9190614a43565b610686610a313660046147d5565b611820565b348015610a4257600080fd5b50610476610a51366004614739565b73ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b348015610a8557600080fd5b50610686610a94366004614a86565b611b01565b348015610aa557600080fd5b50610476611b5881565b348015610abb57600080fd5b50610476666379da05b6000081565b348015610ad657600080fd5b50600754610476565b348015610aeb57600080fd5b5061047660135481565b348015610b0157600080fd5b50610686610b10366004614a07565b611c6c565b348015610b2157600080fd5b50610499610b303660046147d5565b611d47565b610686611e86565b348015610b4957600080fd5b50610686610b58366004614aff565b612271565b348015610b6957600080fd5b50610686610b78366004614b6a565b6125bd565b348015610b8957600080fd5b50610686610b98366004614869565b612755565b348015610ba957600080fd5b5061041e610bb8366004614818565b61282d565b348015610bc957600080fd5b50610476610bd8366004614bfc565b600b60209081526000928352604080842090915290825290205481565b348015610c0157600080fd5b50610686610c10366004614818565b612971565b348015610c2157600080fd5b50610686610c303660046147ee565b612b81565b348015610c4157600080fd5b5060155461078f9063ffffffff8082169164010000000090041682565b348015610c6a57600080fd5b5061041e610c79366004614bfc565b600d60209081526000928352604080842090915290825290205460ff1681565b348015610ca557600080fd5b50610686610cb4366004614c26565b612c9f565b348015610cc557600080fd5b50610686610cd4366004614739565b612d3a565b348015610ce557600080fd5b50610a16610cf43660046147ee565b612d9b565b348015610d0557600080fd5b50610476610d14366004614739565b60196020526000908152604090205481565b348015610d3257600080fd5b50610a16610d41366004614c9d565b612f42565b348015610d5257600080fd5b50610686610d61366004614739565b612fdf565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f409071a5000000000000000000000000000000000000000000000000000000001480610df957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b80610e4557507fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000145b80610e9157507fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b0700000000000000000000000000000000000000000000000000000000145b92915050565b60028054610ea490614cbf565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed090614cbf565b8015610f1d5780601f10610ef257610100808354040283529160200191610f1d565b820191906000526020600020905b815481529060010190602001808311610f0057829003601f168201915b505050505081565b6000610f30826130f7565b15610f4457610f3f8383612b81565b610f55565b610f4e838361130d565b9050610e91565b50600192915050565b905090565b600073ffffffffffffffffffffffffffffffffffffffff82161580610e9157505073ffffffffffffffffffffffffffffffffffffffff1660009081526010602052604090205460ff1690565b6000610fba826130f7565b15610fcf57610fca848484612971565b610fe1565b610fda84848461282d565b9050610fe5565b5060015b9392505050565b60006008544614610fff57610f5e61313b565b5060095490565b61100e6131d5565b8163ffffffff168163ffffffff1611611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4d555354285f656e6454696d65203e205f737461727454696d6529000000000060448201526064015b60405180910390fd5b6040805180820190915263ffffffff928316808252919092166020909201829052601580547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016909117640100000000909202919091179055565b6110fe83838360405180602001604052806000815250611b01565b505050565b61110b6131d5565b73ffffffffffffffffffffffffffffffffffffffff82166111d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f54686520696e70757420706172616d6574657273206f6620746865206164647260448201527f6573732074797065206d757374206e6f74206265207a65726f2061646472657360648201527f732e000000000000000000000000000000000000000000000000000000000000608482015260a40161107f565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff841690839060405161120b9190614d12565b60006040518083038185875af1925050503d8060008114611248576040519150601f19603f3d011682016040523d82523d6000602084013e61124d565b606091505b50509050806112b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c656400000000000000000000000000604482015260640161107f565b8273ffffffffffffffffffffffffffffffffffffffff167f566e45b1c8057e725bf62796a7f1d37ae294393cab069725a09daddd1af98b798360405161130091815260200190565b60405180910390a2505050565b600073ffffffffffffffffffffffffffffffffffffffff831661135c576040517f5461585f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6113d5613263565b6113de82613367565b6113e8828261336f565b5050565b60006113f66134a8565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6000818152600e602052604090205473ffffffffffffffffffffffffffffffffffffffff16611449826130f7565b61147f576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166114cc576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6114d96131d5565b6114e282610f63565b61156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f5468652061646472657373206973206e6f74206572633732315472616e73666560448201527f724578656d707400000000000000000000000000000000000000000000000000606482015260840161107f565b60008111801561158d5750611b588160145461158a9190614d5d565b11155b611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f546865206d6178696d756d206d696e742072657761726473207175616e74697460448201527f792063616e6e6f74206578636565642037303030000000000000000000000000606482015260840161107f565b806014600082825461162b9190614d5d565b90915550506005546113e89083906116439084614d70565b613517565b6116506131d5565b61165a60006135c8565b565b60038054610ea490614cbf565b73ffffffffffffffffffffffffffffffffffffffff82166116b6576040517fccea9e6f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff831661179c576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe533848461365e565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f602090815260409182902080548351818402810184019094528084526060939283018282801561181457602002820191906000526020600020905b815481526020019060010190808311611800575b50505050509050919050565b601554640100000000900463ffffffff1642111561186a576040517fae5184fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60155463ffffffff16421080156118835750600a601354105b156118ba576040517f6aee5c3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000811180156118d95750610bb8816012546118d69190614d5d565b11155b611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d696e74206e756d6265724f66546f6b656e732065786365656473206c696d6960448201527f7400000000000000000000000000000000000000000000000000000000000000606482015260840161107f565b33600090815260196020526040902054600390611983908390614d5d565b1115611a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4d696e74206e756d6265724f66546f6b656e732065786365656473206d61786960448201527f6d756d206c696d69740000000000000000000000000000000000000000000000606482015260840161107f565b34611a2382668e1bc9bf040000614d70565b1115611ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f7420456e6f756768204554482076616c756520746f206d696e7420746f6b60448201527f656e730000000000000000000000000000000000000000000000000000000000606482015260840161107f565b8060126000828254611ac39190614d5d565b90915550503360009081526019602052604081208054839290611ae7908490614d5d565b90915550611afe9050336005546116439084614d70565b50565b611b0a826130f7565b611b40576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b4b848484610faf565b5073ffffffffffffffffffffffffffffffffffffffff83163b15801590611c2f57506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611bc7903390899088908890600401614d87565b6020604051808303816000875af1158015611be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0a9190614de2565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b15611c66576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611c746131d5565b73ffffffffffffffffffffffffffffffffffffffff8216611d3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f54686520696e70757420706172616d6574657273206f6620746865206164647260448201527f6573732074797065206d757374206e6f74206265207a65726f2061646472657360648201527f732e000000000000000000000000000000000000000000000000000000000000608482015260a40161107f565b6113e88282613924565b60606000611d548361141b565b73ffffffffffffffffffffffffffffffffffffffff1603611dd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c696420746f6b656e49640000000000000000000000000000000000604482015260640161107f565b601a546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063c87b56dd90602401600060405180830381865afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610e919190810190614dff565b60165463ffffffff16421015611ec8576040517f6aee5c3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601654640100000000900463ffffffff16421115611f12576040517fae5184fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60135403611f4e576040517fae5184fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526017602052604090205460ff16611faf576040517fa4f3966500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161107f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526018602052604090205460ff1615612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f54686973206163636f756e742068617320616c726561647920574c206d696e7460448201527f6564000000000000000000000000000000000000000000000000000000000000606482015260840161107f565b600a60135460016120769190614d5d565b11156120de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f574c206d696e742065786365656473206c696d69740000000000000000000000604482015260640161107f565b610bb860125460016120f09190614d5d565b1115612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d696e742065786365656473206c696d69740000000000000000000000000000604482015260640161107f565b34666379da05b6000011156121ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4e6f7420456e6f756768204554482076616c756520746f20574c206d696e742060448201527f746f6b656e730000000000000000000000000000000000000000000000000000606482015260840161107f565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260186020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055601280549161224b83614e6d565b90915550506013805490600061226083614e6d565b9190505550611afe81600554613517565b428410156122ab576040517f05787bdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122b4856130f7565b156122eb576040517f1f3e0de800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616612338576040517f5461585f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001612344610fec565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526011602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015612496573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158061251057508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15612547576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600b602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156126085750825b905060008267ffffffffffffffff1660011480156126255750303b155b905081158015612633575080155b1561266a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156126cb5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6126d48a613997565b6126dc6139a8565b6126e8898989896139b0565b83156127495784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b61275d6131d5565b8163ffffffff168163ffffffff16116127d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4d555354285f656e6454696d65203e205f737461727454696d65290000000000604482015260640161107f565b6040805180820190915263ffffffff928316808252919092166020909201829052601680547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016909117640100000000909202919091179055565b600073ffffffffffffffffffffffffffffffffffffffff841661287c576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166128c9576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600b602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461295d5761292b8382614ea5565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600b602090815260408083203384529091529020555b61296885858561365e565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff83166129be576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216612a0b576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600e602052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614612a6b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff841614801590612ac2575073ffffffffffffffffffffffffffffffffffffffff83166000908152600d6020908152604080832033845290915290205460ff16155b8015612af257506000818152600c602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15612b29576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b3282610f63565b15612b69576040517f5ce7539700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b768383600554613a6b565b6110fe838383613b4e565b6000818152600e602052604090205473ffffffffffffffffffffffffffffffffffffffff16338114801590612be7575073ffffffffffffffffffffffffffffffffffffffff81166000908152600d6020908152604080832033845290915290205460ff16155b15612c1e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600c602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b612ca76131d5565b60005b818110156110fe57600160176000858585818110612cca57612cca614eb8565b9050602002016020810190612cdf9190614739565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101612caa565b612d426131d5565b73ffffffffffffffffffffffffffffffffffffffff8116612d92576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161107f565b611afe816135c8565b60606000612dcb8473ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205490565b9050612dd684610f63565b612f3b57600060055484612dea9190614f16565b9050600060055485612dfc9190614f2a565b905060055483612e0c9190614f16565b600554612e198386614ea5565b612e239190614f16565b1015612e375781612e3381614e6d565b9250505b8115612f38578167ffffffffffffffff811115612e5657612e5661489c565b604051908082528060200260200182016040528015612e7f578160200160208202803683370190505b50935060005b82811015612f36576000612e9a826001614d5d565b73ffffffffffffffffffffffffffffffffffffffff89166000908152600f6020526040902054612eca9190614ea5565b73ffffffffffffffffffffffffffffffffffffffff89166000908152600f6020526040902080549192509082908110612f0557612f05614eb8565b9060005260206000200154868381518110612f2257612f22614eb8565b602090810291909101015250600101612e85565b505b50505b5092915050565b606060008267ffffffffffffffff811115612f5f57612f5f61489c565b604051908082528060200260200182016040528015612f88578160200160208202803683370190505b509050835b612f978486614d5d565b811015612fd757612fa9600082613dbe565b82612fb48784614ea5565b81518110612fc457612fc4614eb8565b6020908102919091010152600101612f8d565b509392505050565b612fe76131d5565b73ffffffffffffffffffffffffffffffffffffffff81166130b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f54686520696e70757420706172616d6574657273206f6620746865206164647260448201527f6573732074797065206d757374206e6f74206265207a65726f2061646472657360648201527f732e000000000000000000000000000000000000000000000000000000000000608482015260a40161107f565b601a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600070010000000000000000000000000000000082118015610e915750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141590565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600260405161316d9190614f3e565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b336132147f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161107f565b3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061333057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166133177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561165a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afe6131d5565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156133f4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526133f191810190614fd1565b60015b613442576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161107f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461349e576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161107f565b6110fe8383613e61565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461165a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613564576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b700100000000000000000000000000000000816006546135849190614d5d565b11156135bc576040517f303b682f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110fe6000838361365e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600a602052604080822054928516825281205490919061369c868686613a6b565b60006136a787610f63565b905060006136b487610f63565b90508180156136c05750805b61391657811561373c576000600554846136da9190614f16565b60055473ffffffffffffffffffffffffffffffffffffffff8a166000908152600a602052604090205461370d9190614f16565b6137179190614ea5565b905060005b818110156137355761372d89613ec4565b60010161371c565b5050613916565b80156137ab5760055473ffffffffffffffffffffffffffffffffffffffff89166000908152600a6020526040812054909161377691614f16565b6005546137839087614f16565b61378d9190614ea5565b905060005b81811015613735576137a38a61402d565b600101613792565b6000600554876137bb9190614f16565b905060005b818110156138585773ffffffffffffffffffffffffffffffffffffffff8a166000908152600f60205260408120546137fa90600190614ea5565b73ffffffffffffffffffffffffffffffffffffffff8c166000908152600f60205260408120805492935090918390811061383657613836614eb8565b9060005260206000200154905061384e8c8c83613b4e565b50506001016137c0565b50806005546138898b73ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205490565b6138939190614f16565b6005546138a09088614f16565b6138aa9190614ea5565b11156138b9576138b98961402d565b80600554856138c89190614f16565b60055473ffffffffffffffffffffffffffffffffffffffff8b166000908152600a60205260409020546138fb9190614f16565b6139059190614ea5565b11156139145761391488613ec4565b505b506001979650505050505050565b801561393857613933826140e1565b613941565b61394182614122565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260106020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b61399f6141b4565b611afe8161421b565b61165a6141b4565b6139b86141b4565b60026139c48582615038565b5060036139d18482615038565b5060128260ff161015613a10576040517f98790fd500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff841617905580613a4983600a615274565b613a539190614d70565b60055546600855613a6261313b565b60095550505050565b73ffffffffffffffffffffffffffffffffffffffff8316613aa3578060066000828254613a989190614d5d565b90915550613ade9050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a602052604081208054839290613ad8908490614ea5565b90915550505b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600a6020526040908190208054850190555190918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613b419085815260200190565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831615613ca5576000818152600c6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff86168352600f90915281208054613bcf90600190614ea5565b81548110613bdf57613bdf614eb8565b90600052602060002001549050818114613c59576000828152600e602052604081205460a01c73ffffffffffffffffffffffffffffffffffffffff86166000908152600f602052604090208054919250839183908110613c4157613c41614eb8565b600091825260209091200155613c578282614223565b505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f60205260409020805480613c8d57613c8d615283565b60019003818190600052602060002001600090559055505b73ffffffffffffffffffffffffffffffffffffffff821615613d4e576000818152600e6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908101909155808452600f83529083208054600181810183558286529385200185905592529054613d49918391613d449190614ea5565b614223565b613d5e565b6000818152600e60205260408120555b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000613df883546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b8210613e30576040517f580821e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5081546fffffffffffffffffffffffffffffffff908116820116600090815260018301602052604090205492915050565b613e6a826142cd565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115613ebc576110fe828261439c565b6113e8614416565b73ffffffffffffffffffffffffffffffffffffffff8116613f11576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092041614613f5557613f4e600061444e565b9050613fc5565b600760008154613f6490614e6d565b90915550600754600101613fa4576040517f303b682f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754613fc290700100000000000000000000000000000000614d5d565b90505b6000818152600e602052604090205473ffffffffffffffffffffffffffffffffffffffff168015614022576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110fe818484613b4e565b73ffffffffffffffffffffffffffffffffffffffff811661407a576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812080546140ad90600190614ea5565b815481106140bd576140bd614eb8565b906000526020600020015490506140d682600083613b4e565b6113e8600082614521565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812054905b818110156110fe5761411a8361402d565b600101614109565b60006005546141538373ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205490565b61415d9190614f16565b9050600061418d8373ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b905060005b61419c8284614ea5565b811015611c66576141ac84613ec4565b600101614192565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661165a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d426141b4565b6000828152600e60205260409020546bffffffffffffffffffffffff821115614278576040517ffcb3438c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000928352600e602052604090922073ffffffffffffffffffffffffffffffffffffffff9290921660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016019055565b8073ffffffffffffffffffffffffffffffffffffffff163b600003614336576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161107f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff16846040516143c69190614d12565b600060405180830381855af49150503d8060008114614401576040519150601f19603f3d011682016040523d82523d6000602084013e614406565b606091505b50915091506129688583836145f9565b341561165a576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546000906fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116911681036144b4576040517f75e52f4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016fffffffffffffffffffffffffffffffff9081166000818152600185016020526040812080549190558454909216700100000000000000000000000000000000909102179092555090565b81546fffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019170010000000000000000000000000000000090048116908216036145aa576040517f8acb5f2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff16600081815260018401602052604090209190915581547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055565b60608261460e5761460982614688565b610fe5565b8151158015614632575073ffffffffffffffffffffffffffffffffffffffff84163b155b15614681576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161107f565b5080610fe5565b8051156146985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611afe57600080fd5b60006020828403121561470a57600080fd5b8135610fe5816146ca565b803573ffffffffffffffffffffffffffffffffffffffff811681146114cc57600080fd5b60006020828403121561474b57600080fd5b610fe582614715565b60005b8381101561476f578181015183820152602001614757565b50506000910152565b60008151808452614790816020860160208601614754565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610fe56020830184614778565b6000602082840312156147e757600080fd5b5035919050565b6000806040838503121561480157600080fd5b61480a83614715565b946020939093013593505050565b60008060006060848603121561482d57600080fd5b61483684614715565b925061484460208501614715565b929592945050506040919091013590565b803563ffffffff811681146114cc57600080fd5b6000806040838503121561487c57600080fd5b61488583614855565b915061489360208401614855565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156149125761491261489c565b604052919050565b600067ffffffffffffffff8211156149345761493461489c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261497157600080fd5b813560208301600061498a6149858461491a565b6148cb565b905082815285838301111561499e57600080fd5b82826020830137600092810160200192909252509392505050565b600080604083850312156149cc57600080fd5b6149d583614715565b9150602083013567ffffffffffffffff8111156149f157600080fd5b6149fd85828601614960565b9150509250929050565b60008060408385031215614a1a57600080fd5b614a2383614715565b915060208301358015158114614a3857600080fd5b809150509250929050565b602080825282518282018190526000918401906040840190835b81811015614a7b578351835260209384019390920191600101614a5d565b509095945050505050565b60008060008060808587031215614a9c57600080fd5b614aa585614715565b9350614ab360208601614715565b925060408501359150606085013567ffffffffffffffff811115614ad657600080fd5b614ae287828801614960565b91505092959194509250565b803560ff811681146114cc57600080fd5b600080600080600080600060e0888a031215614b1a57600080fd5b614b2388614715565b9650614b3160208901614715565b95506040880135945060608801359350614b4d60808901614aee565b9699959850939692959460a0840135945060c09093013592915050565b600080600080600060a08688031215614b8257600080fd5b614b8b86614715565b9450602086013567ffffffffffffffff811115614ba757600080fd5b614bb388828901614960565b945050604086013567ffffffffffffffff811115614bd057600080fd5b614bdc88828901614960565b935050614beb60608701614aee565b949793965091946080013592915050565b60008060408385031215614c0f57600080fd5b614c1883614715565b915061489360208401614715565b60008060208385031215614c3957600080fd5b823567ffffffffffffffff811115614c5057600080fd5b8301601f81018513614c6157600080fd5b803567ffffffffffffffff811115614c7857600080fd5b8560208260051b8401011115614c8d57600080fd5b6020919091019590945092505050565b60008060408385031215614cb057600080fd5b50508035926020909101359150565b600181811c90821680614cd357607f821691505b602082108103614d0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008251614d24818460208701614754565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610e9157610e91614d2e565b8082028115828204841417610e9157610e91614d2e565b73ffffffffffffffffffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201526000614dd86080830184614778565b9695505050505050565b600060208284031215614df457600080fd5b8151610fe5816146ca565b600060208284031215614e1157600080fd5b815167ffffffffffffffff811115614e2857600080fd5b8201601f81018413614e3957600080fd5b8051614e476149858261491a565b818152856020838501011115614e5c57600080fd5b612968826020830160208601614754565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e9e57614e9e614d2e565b5060010190565b81810381811115610e9157610e91614d2e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f2557614f25614ee7565b500490565b600082614f3957614f39614ee7565b500690565b6000808354614f4c81614cbf565b600182168015614f635760018114614f9657614fc6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083168652811515820286019350614fc6565b86600052602060002060005b83811015614fbe57815488820152600190910190602001614fa2565b505081860193505b509195945050505050565b600060208284031215614fe357600080fd5b5051919050565b601f8211156110fe57806000526020600020601f840160051c810160208510156150115750805b601f840160051c820191505b81811015615031576000815560010161501d565b5050505050565b815167ffffffffffffffff8111156150525761505261489c565b615066816150608454614cbf565b84614fea565b6020601f8211600181146150b857600083156150825750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455615031565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b8281101561510657878501518255602094850194600190920191016150e6565b508482101561514257868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b6001815b600184111561518c5780850481111561517057615170614d2e565b600184161561517e57908102905b60019390931c928002615155565b935093915050565b6000826151a357506001610e91565b816151b057506000610e91565b81600181146151c657600281146151d0576151ec565b6001915050610e91565b60ff8411156151e1576151e1614d2e565b50506001821b610e91565b5060208310610133831016604e8410600b841016171561520f575081810a610e91565b61523a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615151565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561526c5761526c614d2e565b029392505050565b6000610fe560ff841683615194565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220046a496065ada2950bb8f9c1d2c47ead0ddb5c1d808e03a8a848a2de6b793c8464736f6c634300081a0033